2015-08-26 56 views
1

我一直在研究這個問題,只有很小的成功,所以我來這裏得到一些新的建議。將非常大的文件劃分爲小圖案(bash)

我試圖將每次掃描的數據提取到單獨的文件中。

問題是,在創建3196個文件後,我收到錯誤消息:awk「使得打開的文件太多」。

我知道我需要關閉由awk創建的文件,但我不知道該怎麼做。

文本inputfile中是這樣看(最多80個000掃描):

Scan 1 
11111 111 
22222 221 
... 
Scan 2 
11122 111 
11122 111 
... 
Scan 3 
11522 141 
19922 141 
... 

現在我一直在做:

​​

這給了我一個遞增的輸出文件,每掃描和3196文件創建後崩潰..

cat filescan1 
Scan 1 
11111 111 
22222 221 
... 

任何想法?

Thx。

+0

也許'csplit'會讓你感興趣 - 例如, 'csplit -f filescan -n 4 input.txt「/^Scan /」「{*}」' – twalberg

回答

1

您需要close the output file,因爲awk會保持文件句柄處於打開狀態。

awk '/.*Scan.*/{ 
    close(file); 
    n++; 
} 
{ 
    file="filescan"n; 
    print >> file; 
}' inputfile 
+0

當您繼續關閉文件並覆蓋那裏的內容時,使用「>>」進行追加。或者,也可以在增加n時在同一個塊中打開和關閉該文件。 – 123

+0

我不確定它是否昂貴,但是您可以用'awk'/.*掃描每行消除文件打開/關閉。*/{close(file); n ++} {...' – karakfa

+0

Thx all。因此,awk'/.*Scan.*/{n++}{file="filescan"n;print >> file; close(file);}'inputfile正在完成這項工作,但它真的很慢......接近1秒文件已創建。任何想法加快它?無論如何。 –

相關問題