[英]AWK split file by separator and count
我有一个大的220mb文件。 该文件按水平行“---”分组。 这是我到目前为止:
cat test.list | awk -v ORS="" -v RS="-------------------------------------------------------------------------------" '{print $0;}'
如何获取此信息并每1000次匹配打印到一个新文件?
还有另一种方法吗? 我看了分裂和csplit,但是“----”行没有出现可预测的因此我必须匹配它们,然后拆分匹配计数。
我希望输出文件为每个文件1000个匹配的组。
要输出的前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
没有经过测试,但这些内容可能有效:
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
代替......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.