AWK按分隔符和计数分割文件

时间:2012-12-06 21:13:20

标签: bash unix awk

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

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

如何获取此信息并每1000次匹配打印到一个新文件?

还有其他办法吗?我看了split和csplit,但是“----”行没有预测到,所以我必须匹配它们,然后分成匹配数。

我希望输出文件为每个文件1000个匹配的组。

2 个答案:

答案 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代替......