在第n个分隔符实例上将文本文件拆分为多个文件

时间:2016-08-30 19:29:04

标签: awk

我有一个大型文本文件,其中包含每个条目的标题-XXXX-和页脚$$$$的重复数据集。有大约20k条目,我想将它分成每个500个条目的文件。

我一直在玩awk并使用下面关闭的命令。每个文件都以-XXXX-开头,但是第一个文件后面的每个文件都有一个部分条目。

awk "/-XXXX-/ { delim++ } { file = sprintf(\"file%s.sdf\", int(delim / 500)); print > file; }" < big.sdf

例如:

-XXXX-
Beginning
Middle
End
$$$$
-XXXX-
Beginning

我希望每个文件都在$$$$之后结束。

我在Windows上使用awk

1 个答案:

答案 0 :(得分:2)

因此,如果-XXXX-和$$$$之间的每组数据都是一条记录,那么您希望一次写入500条记录来分隔文件?看起来你需要两个计数器 - 一个用于输出文件名只是上升,另一个用于当前&#34;批次&#34;中的记录数量,最多为500,但随后重置为零下一批。类似的东西:

BEGIN {fctr=1 ; rctr=0 ; file=("file" fctr ".sdf")}
/^\$\$\$\$$/ {print > file ; rctr+=1}
rctr==500 {fctr+=1 ; file=("file" fctr ".sdf") ; rctr=0}
!/^\$\$\$\$$/ {print > file}
  • 第1行设置初始值,并以file1.sdf

  • 开始
  • 第2行匹配每条记录的页脚,每次看到记录时都会增加记录计数器(以及写出当前的页脚)

  • 第3行是我们达到500条记录的时候。首先移动到下一个文件名,然后将记录计数重置为零

  • 第4行适用于所有常规行。只需将它们发送到当前文件名

  • 即可