【发布时间】:2017-01-07 05:16:37
【问题描述】:
我有一个大文本文件,其中包含一组重复的数据,每个条目的标题-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。
【问题讨论】:
-
当您说“第一个文件之后的每个文件末尾都有部分条目”时,您是在描述输入数据文件还是当前获得的输出?
-
我目前得到的输出。第一个文件正确地在 $$$$ 下方截断。后续文件包括 -XXXX- 之后的部分条目。注意:我发现如果我在我的 Windows 机器上的 Cygwin shell 中运行上面的代码,我会得到正确的行为,但是如果我通过 Windows 中的命令提示符运行它,它就会像上面描述的那样搞砸。
-
我很难弄清楚发生了什么。我再也无法访问任何 Windows 机器了——这是几十年来的第一次——所以我不能尝试很容易地复制这个问题。你说的话听起来很奇怪。文件是否以换行符终止(Windows 上的 CRLF)?如果不是,那可能是您所看到的部分原因。
-
您指的是哪些文件?输入还是输出?
-
主要是输入文件,但我试图确保我理解这些问题,因为可能存在持续存在的问题(如果没有问题,你就不会仍然提问)。您可以修改问题以明确您在每一点上所说的内容;如果您可以显示一个包含 6 个条目的输入文件,以及将其拆分为 3 个包含 2 个条目的文件和/或 2 个每个包含 3 个条目的文件时所得到的内容,那就太好了。如果最坏的情况变得最糟,请给我发送电子邮件(请参阅我的个人资料),其中包含示例数据文件以及您的脚本和示例输出文件(您得到什么以及您想要什么)。
标签: awk