我有一个大的220mb文件。该文件按水平行“---”分组。这就是我到目前为止所做的:
cat test.list | awk -v ORS="" -v RS="-------------------------------------------------------------------------------" '{print $0;}'
如何获取此信息并每1000次匹配打印到一个新文件?
还有其他办法吗?我看了split和csplit,但是“----”行没有预测到,所以我必须匹配它们,然后分成匹配数。
我希望输出文件为每个文件1000个匹配的组。
答案 0 :(得分: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
答案 1 :(得分: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
代替......