2015-03-24 37 views
78

當我們使用sort file命令, 時,文件以排序的方式顯示其內容如果我不想獲得任何類型的輸出而是排序的文件?如何對文件進行就地排序

+0

請更新您的問題,以清楚地說明您想要對文件進行排序的結果。你是否想對它進行排序,用相同文件的排序內容替換'文件'的未排序內容?你現在提出的問題的方式,什麼都不做是一個正確的答案(你不需要任何輸出,所以不要做任何事情)。 – 2015-03-24 22:59:05

+0

@KeithThompson實際上感謝您的關注,我試圖對文件進行排序,但希望避免屏幕上的輸出。 – 2015-03-24 23:01:33

+0

那麼你想要輸出到哪裏?進入新文件?進入原始文件?到大廳裏的打印機? – 2015-03-24 23:04:40

回答

167

您可以使用文件重定向到重定向排序輸出:

sort input-file > output_file 

或者您可以使用排序的-o選項指示相同的輸入和輸出文件:

sort file -o file 

注:一個常見的錯誤是試圖將輸出重定向到相同的輸入文件 (例如sort file > file)。由於shell正在執行重定向(不是程序的排序(1)),並且輸入文件(作爲輸出)也將在給予程序機會之前被刪除閱讀它。

+18

關於常見錯誤的注意事項 – Drakes 2016-06-21 15:27:27

+1

當您需要手動編輯LaTeX字典時,這真的很方便,+1 – 2016-09-22 17:27:14

+2

只需提及訂單的重要性即可。 從'GNU sort'信息頁面: '-o OUTPUT-FILE ' '--output = OUTPUT-FILE' 輸出寫入OUTPUT-FILE而不是標準輸出。 在新系統上,如果設置了 'POSIXLY_CORRECT',例如'sort F -o F',則輸入文件後面不會出現'-o'。便攜式腳本 應在任何輸入文件之前指定'-o OUTPUT-FILE'。 – 2017-10-06 07:48:57

26

默認情況下,sort命令將排序操作的結果打印到標準輸出。爲了實現「就地」之類的,你可以這樣做:

sort -o file file 

這覆蓋與有序輸出輸入file。該-o開關,用於指定輸出,is defined by POSIX,所以應適用於所有版本的sort

-o指定輸出文件的名稱中使用的,而不是標準輸出。該文件可以與其中一個輸入文件相同。

如果你不幸有一個版本的sort沒有-o開關(Luis向我保證它們的存在),就可以實現在標準方式的「就地」編輯:

sort file > tmp && mv tmp file 
+2

不是,它們可能在不符合POSIX標準的排序版本上(有一些)不可用如果您需要對同一個文件進行排序,只需執行'sort filea> fileb; mv -f fileb filea'。 – 2015-03-25 12:17:22