尝试使用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
对处理此问题的方法提出一些建议!
答案 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