我有一个220mb的大文件。 文件按水平行"---"分组。 这是我到目前为止所拥有的:
cat test.list | awk -v ORS="" -v RS="-------------------------------------------------------------------------------" '{print $0;}'
我如何获取它并每 1000 个匹配项打印到一个新文件?
有没有其他方法可以做到这一点? 我查看了拆分和拆分,但"----"行无法预测地发生,所以我必须匹配它们,然后拆分
匹配计数。我希望将输出文件到每个文件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
......