gpt4 book ai didi

linux - 搜索第一列中的数字并根据其在 Linux 中的值更改第二列中的值

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:33 25 4
gpt4 key购买 nike

我有如下输入

$Interpreted from averaged nodal data
14725 0.0000000e+00
14726 0.0000000e+00
14727 0.0000000e+00
16263 6.4771147e-03
16264 6.3834046e-03
16265 6.4125084e-03
16266 6.5514743e-03

中间有时也会出现文本,但当一行有数字时,它仍然如上所示

我必须在第一个位置搜索某个数字,然后检查第二个数字。如果第二个数字大于某个值(例如 0.002),则可以保持这样,但如果它小于 0.002,则该值在同一文件中更改为 0.002。就像如果我想搜索 14725 并且它的值为零文件应该转向

$Interpreted from averaged nodal data
14725 0.0020000e+00
14726 0.0000000e+00
14727 0.0000000e+00
16263 6.4771147e-03
16264 6.3834046e-03
16265 6.4125084e-03
16266 6.5514743e-03

所有数据都是空格分隔的,在左边的数字之前,我们也有空格。左侧始终保持整数,而右侧始终为实数。对 awk 或 sed -i 对于 infile 更改有什么建议吗?

提前致谢

最佳答案

awk -v needle=14725 '$1 == needle && $2 < 0.002 { $2 = 0.002 } 1' filename

使用 awk 代码中的 -v Needle=14725 needle 将具有值 14725 (使用固定值,您可以将其直接放入代码中,但我假设它来自变量),然后

$1 == needle && $2 < 0.002 {   # if the first field is the searched number
# and the second smaller than 0.002
$2 = 0.002 # set the second field to 0.002.
# Use $2 = "0.0020000e+00" if the
# number format is important.
}
1 # print.

使用 GNU awk 4.1.0 或更高版本,您可以使用

awk -i inplace -v needle=14725 '$1 == needle && $2 < 0.002 { $2 = 0.002 } 1' filename

就地编辑文件。

附录(评论答案):为了保持格式完整,我会使用

awk -v needle=14727 '$1 == needle && NF == 2 && $2 < 0.002 { sub(/[^[:space:]]*$/, "0.0020000e+00"); } 1' filename

主要的变化是,我们使用 sub(/[^[:space:]]*$/, "0.0020000e+00");,而不是导致从字段重建行的 $2 = 0.002,它将行中最后一批非空格字符替换为 “0.0020000e+00”。而且,为了避免出现问题,我们检查该字段中是否只有两行。

关于linux - 搜索第一列中的数字并根据其在 Linux 中的值更改第二列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903753/

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