我有一个名为 Au7.ANI 的文件,其格式如下:
每次数字 37 作为标题出现时,都意味着后面有一组新的坐标。这在文件中重复了 2,000 次。
我想要做的是将这个文件拆分成多个文件,通过在每个文件的顶部添加 37 以及其后的一组相应的 xyz 坐标。
这应该会产生 2,000 个文件,因为该文件中有 2,000 个单独的 xyz 坐标。
我该如何做到这一点并让每个文件都命名为 coord.xyz_1、coord.xyz_2 等,直到 coord.xyz_2000?
谢谢你!
答案1
我可能会选择 csplit 而不是 perl:很难给出一个精确的(经过测试的)答案,因为你发布的是文件的 png 图像而不是实际的文本,但类似
csplit -f 'coord.xyz_' -b '%d' yourfile '/^[[:space:]]*37$/' '{*}'
在哪里
-f 'coord.xyz_'
设置输出文件名前缀-b '%d'
将输出数字后缀格式设置为未填充的十进制数字- 正则表达式
/^[[:space:]]*37$/
匹配37
前面可选的空格 {*}
说尽可能多地重复之前的模式
请注意,正则表达式可能会根据文件的实际内容进行简化:例如,如果标记37
始终由单个制表符缩进,则可以将其简化为/^\t37$/
。
如果你想在 perl 中实现一些等效的东西(根据你的标签),那么基于这个建议如何将一个文本文件拆分为多个文本文件?你可以尝试
perl -ne 'open(F, ">", "coord.xyz_".++$n) if /[[:space:]]*37/; print F;' yourfile