【发布时间】:2019-10-05 21:53:20
【问题描述】:
我有多个文件,其中包含数千行以下模式:
O HOH 1 11.700 -11.906 1.533
H HOH 0 12.561 -12.318 1.596
H HOH 0 11.445 -12.031 0.627
O HOH 2 17.897 8.999 -0.104
H HOH 0 18.444 8.521 0.516
H HOH 0 17.127 8.457 -0.223
O HOH 3 -0.688 10.310 -15.189
H HOH 0 -0.760 9.366 -15.055
H HOH 0 -0.494 10.665 -14.324
O HOH 4 -10.418 3.733 4.069
H HOH 0 -9.928 3.726 4.897
H HOH 0 -11.222 4.218 4.268
O HOH 5 2.655 -8.910 13.338
H HOH 0 2.377 -9.739 13.737
H HOH 0 1.847 -8.531 12.992
O HOH 6 -0.191 -1.010 -19.469
H HOH 0 0.455 -1.460 -18.924
H HOH 0 -0.571 -0.343 -18.895
O HOH 7 14.338 -15.985 -1.467
H HOH 0 15.129 -15.647 -1.886
H HOH 0 13.854 -16.408 -2.175
O HOH 8 -15.510 -7.073 1.857
H HOH 0 -15.526 -6.116 1.874
H HOH 0 -16.341 -7.321 1.464
O HOH 9 9.155 6.561 -7.729
H HOH 0 9.419 7.335 -7.245
H HOH 0 9.943 6.018 -7.768
.
.
.
.
O HOH 999999 9.155 6.561 -7.729
H HOH 0 9.419 7.335 -7.245
H HOH 0 9.943 6.018 -7.768
我需要用'H HOH xxx' 替换'H HOH 0' 的每两个连续瞬间,其中xxx 是0s 正上方的值
我尝试过的是,我使用
将大文件拆分为 3 行文件split -l 3 foo
然后使用 awk 我将所需的值复制到另一个文件中
awk 'NR==1 print $3' > foo--
然后尝试使用 sed 通过读取文件 foo-- 并替换 foo 中的“0”来替换模式
sed -e '/ 0 /{r foo--' -e 'd}' foo
但这没有用
很确定有更好的方法来做到这一点
最终结果应该是这样的:
O HOH 1 11.700 -11.906 1.533
H HOH 1 12.561 -12.318 1.596
H HOH 1 11.445 -12.031 0.627
O HOH 2 17.897 8.999 -0.104
H HOH 2 18.444 8.521 0.516
H HOH 2 17.127 8.457 -0.223
O HOH 3 -0.688 10.310 -15.189
H HOH 3 -0.760 9.366 -15.055
H HOH 3 -0.494 10.665 -14.324
O HOH 4 -10.418 3.733 4.069
H HOH 4 -9.928 3.726 4.897
H HOH 4 -11.222 4.218 4.268
O HOH 5 2.655 -8.910 13.338
H HOH 5 2.377 -9.739 13.737
H HOH 5 1.847 -8.531 12.992
O HOH 6 -0.191 -1.010 -19.469
H HOH 6 0.455 -1.460 -18.924
H HOH 6 -0.571 -0.343 -18.895
.
.
.
O HOH 99999 -0.191 -1.010 -19.469
H HOH 99999 0.455 -1.460 -18.924
H HOH 99999 -0.571 -0.343 -18.895
【问题讨论】:
-
H HOH 0是否总是连续出现在两行中? -
@Cyrus.. 是的
-
如果连续出现4次会怎样?
-
@Graeme。这些实际上是水分子的笛卡尔坐标。水分子的分子式为 H2O。所以在这种情况下,总是有一个 O 和 2 个连续的 H 原子。不会连续出现 4 个“H HOH 0”实例。