【发布时间】:2015-11-23 08:57:01
【问题描述】:
我有大约 1000 个文件,其中包含化学结构的 xyz 笛卡尔坐标,下面提供了一个示例
Re -0.87242200 -0.87371100 0.24194200
Re -1.38612300 1.83520600 0.44292100
Re 1.78955700 -0.15746900 0.71425500
我想做的,最好是通过“for”循环,在第二次遇到 Re 之后添加一个额外的行,在该行的第一个位置添加一个符号“H”,然后引入xyz 坐标形式为 1.5+X 1.5+Y 1.5+Z,其中 X Y 和 Z 是第二个 Re 的坐标。这些 xyz 坐标应位于新行中的位置 20、40 和 60(分别代表 X、Y 和 Z)。
【问题讨论】:
-
欢迎来到 Stack Overflow。请尽快阅读About 页面。在
awk中,您需要做的事情看起来不错且直截了当。你尝试了什么,它怎么没能做到你想要的?在 SO 上,我们将帮助您解决解决问题的尝试;我们不会特意为您编写代码。 -
在您的示例文件中,第 3 列从 58 开始。
-
@Jonathan Leffler:谢谢。我还在学习,还没有完全体验过 bash。我已经成功地使用 sed 在第二次出现 Re 后追加了一个以“H”开头的新行。但是我卡在下一步,还不知道如何提取 xyz 值,我猜 Re 的 $2、$3 和 $4,将常量添加到值并将它们作为 $2、$3 和 $4 插入H线。
-
@Micha Wiedenmann。感谢您指出了这一点。 20、40、60的位置并不严格,为了简单我就这么说了。确切的空间不是很重要,列只需要在彼此的几个空间内。
-
当任务涉及浮点运算时,
sed和 Bash 都不是合适的工具(Bash 只支持整数运算;Korn shell 支持浮点)。 awk 是下一步;你可以改用 Perl 或 Python。