我有一个大型文本文件,其中包含每个条目的标题-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
。
答案 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行适用于所有常规行。只需将它们发送到当前文件名