2011-09-02 45 views
1

我試圖運行一個排列測試,其中涉及將一千個非常大的預排序文件合併爲一個大型排序文件。UNIX sort -m命令的空間優化?

當前運行的文件甚至比我通常合併的文件還要多(每個文件爲68M到106M)。

我沒有足夠的硬盤空間用於輸入,臨時中介和輸出全部在同一時間。有沒有辦法使用sort破壞性地合併所有這些文件?

這裏是我目前使用的命令:

sort -T /media/WD_Book/tmp --compress-program=gzip -g -k 6 -m *.rand.tab > /media/WD_Book/output/merged.rand.tab 

(該文件編號0001.rand.tab通過1000.rand.tab和排序關鍵是在指數表示法中第6列[從而-k 6-g]。)

我知道可以在原地運行非合併sort,但該手冊頁明確指出它不適用於-m

+0

如果沒有中介,你能存儲輸入和輸出嗎?如果這些文件是預先分類的,你可以破解一些perl/c/python來進行合併。如果沒有,您可以逐一合併它們並刪除殘餘物。 –

+0

如何將文件0001複製到一個名爲「huge」的文件中,刪除0001,將0002連接成「huge,刪除0002等等,然後對1和唯一的大文件進行排序? –

回答

1

也許這方式(警告:可擦數據)。

touch merged.rand.tab # Create a zero-sized result file 
for file in [0-9]*.rand.tab; do 
    sort -k 6 -g -m merged.rand.tab $file > result.rand.tab 
    rm -f merged.rand.tab 
    mv result.rand.tab merged.rand.tab 
    # you can rm $file if space is really scarce. 
done 

時間基本上交換空間。您一次合併一個文件和前一個合併的結果。另外,您可以刪除已經合併的文件。

再次嘗試之前備份您的數據。 ;-)

+0

我會合並最短或者,假設所有1000個文件的大小相似,並將它們成對合並或組合成10個。 – Neil

+0

您可以通過按大小對輸入文件進行排序來近似前者\ for \ ls -Sr [0-9] *。rand.tab \'IIRC。 –