仅在大于时才替换值

时间:2017-01-27 18:34:25

标签: linux bash shell awk sed

尝试使用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,这种'有点'有效,因为在输出中只有“限制租用时间”行,其值为&gt; 86400:

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

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

对处理此问题的方法提出一些建议!

1 个答案:

答案 0 :(得分:5)

使用=中的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

您也可以使用-v

中的Awk变量导入进行配置
awk -v thresh=86400 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > thresh {$2=thresh}1' file
相关问题