2012-12-06 84 views
1

我有一個大的220MB文件。該文件按水平行「---」分組。這是我到目前爲止:AWK按分隔符和計數分割文件

cat test.list | awk -v ORS="" -v RS="-------------------------------------------------------------------------------" '{print $0;}' 

我該如何把這個打印到每1000個匹配的新文件?

是否有另一種方法可以做到這一點?我看着分裂和csplit,但「----」行不可預測地發生,所以我必須匹配它們,然後分開計數的比賽。

我想輸出文件到每個文件1000匹配組。

回答

3

要輸出的前1000個記錄outputfile0,旁邊outputfile1等,只是做:

awk 'NR%1000 == 1{ file = "outputfile" i++ } { print > file }' ORS= RS=------ test.list 

(請注意,我截斷爲簡單起見,在RS中破折號)。'

不幸的是,使用多於單個字符的值RS會產生未指定的結果,因此上述內容不能成爲解決方案。也許像twalberg的解決方案是必需的:

awk '/^----$/ { if(!(c%1000)) count+=1; c+=1; next } 
    {print > ("outputfile"count)}' c=1 count=1 
+0

該解決方案主要工作,但除第一個以外的所有文件現在開始一個空行。 –

+0

每個「----------」記錄分隔符後面是否有空行? –

+1

不,輸入中沒有空行。在結果中,記錄由換行符分隔(畢竟,分隔符是「---」而不是「--- \ n」),因此新文件中的第一條記錄被換行符「分隔」 。 –

1

沒有測試,但這些方針的東西可能的工作:

awk 'BEGIN {fileno=1,matchcount=0} 
    /^-------/ { if (++matchcount == 1000) { ++fileno; matchcount=0; } } 
       { print $0 > "output_file_" fileno }' < test.list 

這可能是清潔劑把所有的中,說split.awk和使用awk -f split.awk test.list,而不是...