2012-12-06 49 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,而不是...