gpt4 book ai didi

bash - awk:如何将常量添加到 M 行中每第 N 行的数字?

转载 作者:行者123 更新时间:2023-11-29 09:38:54 24 4
gpt4 key购买 nike

我目前在使用 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
...

最佳答案

这是使用 Perl 的解决方案:

perl -i -lape 'if ($. % 4 == 3) { $F[3] += 10; $_ = "@F" }' file

-i 开关使其(看起来)正常工作。使用-i.bak生成包含原始数据的file.bak

$. 存储当前行号; $. % 4 == 3 从每组 4 行中选择第三行。 $F[3] += 10 将该行的第 4 个字段增加 10。

关于bash - awk:如何将常量添加到 M 行中每第 N 行的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com