2011-08-16 58 views
0

我有很多文件,比如1000個文件,每個文件有4MB。完全有4GB。我想用UNIX排序對它們進行排序,這是我的命令:在做unix排序時儘量減少磁盤使用

sort -t ',' -k 1,1 -k 5,7 -k 22,22 -k 2,2r INPUT_UNSORTED_${current_time}.DAT -o INPUT_SORTED_${current_time}.DAT 

其中INPUT_UNSORTED是通過附加1000個文件創建一個大的文件。所以還有另外4GB。 INPUT_SORTED也是另外4GB。

我發現unix排序使用臨時文件夾來排序文件,臨時文件也可能達到4gb。

如何在不損失性能的情況下減少磁盤使用量?

+1

也許你不應該連續你的1000個文件,但給他們分別「排序」:http://stackoverflow.com/questions/3581215/in-unix-is-it-better-to-sort-multiple-small -files-or-one-big-file – Thilo

回答

2

您的目標是獲得一個大的排序輸出文件嗎?看看排序的--merge選項。您可以單獨對小型輸入文件進行排序,然後將它們全部合併到大型的排序輸出中。如果您在生成排序後的對應文件後立即刪除每個未排序的輸入文件,則不會在中間結果中使用超過4MB的空間。

+0

我的最終目標是將大輸出分成4MB的較小文件。我不想立即刪除輸入文件,因爲可能會發生錯誤,並且我的輸入文件可能會丟失。 – lamwaiman1988

+0

您可以在刪除輸入文件之前查看'sort'的退出狀態以查看它是否成功,以便在失敗時不會丟失數據。我假設你將所有文件組合在一起,因爲你想將它們排序在一起,所以如果文件input99包含「aardvark」,它將進入'output1',而不是'output99'的開始。否則,您可以單獨對每個4MB文件進行排序。 – Wyzard