【发布时间】:2019-12-18 13:16:39
【问题描述】:
我目前无法使用 bash 脚本编辑文件。它是一个包含数百个时间戳的一系列原子的笛卡尔坐标 (x,y,z) 的文件。对于由 3 个原子组成的系统,如下所示:
t=1 x y z
O 1.2 1.5 0.8
H 0.4 2.3 1.3
H 1.3 2.5 1.1
t=2 x y z
O 1.3 1.6 0.9
H 0.3 2.5 1.2
H 1.1 2.3 0.9
t=3 x y z
O 1.2 1.8 1.0
H 0.5 2.2 1.1
H 1.5 2.1 0.8
t=4 x y z
...
现在我想在 4 行中的每 3 行的 z 坐标中添加一个常数 10。有谁知道如何解决这个问题?
我已经尝试过使用 awk。但是,它只能输出修改后的行。值得一提的是,我想就地修改原始文件,而不仅仅是输出修改后的行。
awk '{ if ((NR - 3) % 4 == 0) {$4=$4+10; print}}' file > outputfile
预期输出如下:
t=1 x y z
O 1.2 1.5 0.8
H 0.4 2.3 11.3
H 1.3 2.5 1.1
t=2 x y z
O 1.3 1.6 0.9
H 0.3 2.5 11.2
H 1.1 2.3 0.9
t=3 x y z
O 1.2 1.8 1.0
H 0.5 2.2 11.1
H 1.5 2.1 0.8
t=4 x y z
...
现在我只得到:
H 0.4 2.3 11.3
H 0.3 2.5 11.2
H 0.5 2.2 11.1
...
【问题讨论】: