2011-06-01 183 views
5

我在Linux系統上有一個大約10GB的文件。它包含20,000,000個二進制記錄,但每個記錄由ASCII分隔符「$」分隔。我想使用split命令或其組合將文件分塊成較小的部分。理想情況下,我可以指定該命令應該將每1,000條記錄(因此每1,000個分隔符)拆分爲單獨的文件。有人能幫忙嗎?在分隔符上分割文件

回答

5

問題的唯一非傳統部分似乎是記錄分隔符。我敢肯定,這可以在awk中修復 - 但我碰巧討厭awk

我會在「正常」的問題,第一境界其轉移:

tr '$' '\n' < large_records.txt | split -l 1000 

默認將創建xaaxabxac ......文件;看man split更多選項

+0

這完美地工作了它產生的記錄直到它出現錯誤(我認爲這是一個非常簡單的修復)。錯誤是:split:輸出文件後綴耗盡。謝謝你的幫助! – 2011-06-01 12:22:59

+1

呃...我修復了你的manpage鏈接; ['split ... -a 7'](http://unixhelp.ed.ac.uk/CGI/man-cgi?split)應該做得很好 – sehe 2011-06-01 12:35:48

+0

非常好。很棒! – 2011-06-01 12:39:45

2

我愛awk的:)

BEGIN { RS="$"; chunk=1; count=0; size=1000 } 
{ 
    print $0 > "/tmp/chunk" chunk; 
    if (++count>=size) { 
     chunk++; 
     count=0; 
    } 
} 

(注意,awk中的重定向操作者只需截斷/創建它的第一次調用的文件 - 後續引用被視爲附加業務 - 不像外殼重定向)