gpt4 book ai didi

linux - 仅在大于时替换值

转载 作者:太空狗 更新时间:2023-10-29 11:35:47 25 4
gpt4 key购买 nike

尝试使用 shell 命令替换多个文件中的值(在脚本中用于循环访问目录中的文件)。

Input file examples:

file1:
019=False
051=Limited
051>Limited Lease Time=2419200

file2:
019=False
051=Limited
051>Limited Lease Time=14400

这没问题:

sed -e '/Limited Lease Time=/s/[0-9]\+$/86400/g' <infile >outfile

# cat outfile
019=False
051=Limited
051>Limited Lease Time=86400

但是......然后意识到我正在替换任何值,包括低于 86400 的值,而我只想替换任何大于 86400 的值。

我想我可以使用 awk,并且这种“有点”起作用,因为在输出中只有值 > 86400 的“有限租赁时间”行:

awk -F= '/Limited Lease Time/ && $2 > 86400 { print $2 }'

但是......它只输出匹配的行,而我需要原始输出(示例中的 3 行),包括修改,如果匹配值 > 86400。

感谢有关处理此问题的一些建议!

最佳答案

Awk 中使用 = 字段分隔符并在 $2 中获取大于您设置的值的行,

awk 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > 86400 {$2=86400}1' file

对于输入文件,

cat file
019=False
051=Limited
051>Limited Lease Time=14400
051>Limited Lease Time=94400
051>Limited Time=14400

运行命令会根据需要生成输出。

awk 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > 86400 {$2=86400}1' file
019=False
051=Limited
051>Limited Lease Time=14400
051>Limited Lease Time=86400
051>Limited Time=14400

您还可以通过在 Awk 中使用 -v 变量导入使其可配置

awk -v thresh=86400 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > thresh {$2=thresh}1' file

关于linux - 仅在大于时替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900761/

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