1

我有一个 220mb 的大文件。该文件按水平行“---”分组。这是我到目前为止所拥有的:

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

如何每 1000 个匹配项打印到一个新文件?

还有另一种方法可以做到这一点吗?我查看了 split 和 csplit 但“----”行无法预测发生,因此我必须匹配它们,然后根据匹配数进行拆分。

我希望将输出文件分配到每个文件 1000 个匹配的组中。

4

2 回答 2

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
于 2012-12-06T22:20:29.567 回答
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......

于 2012-12-06T21:35:13.437 回答