我需要将一个包含多条轨迹的文件拆分成多个单独的文件

我需要将一个包含多条轨迹的文件拆分成多个单独的文件

我有一个名为 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

相关内容