kpw*_*kpw 2 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
Run Code Online (Sandbox Code Playgroud)
这工作没问题:
sed -e '/Limited Lease Time=/s/[0-9]\+$/86400/g' <infile >outfile
# cat outfile
019=False
051=Limited
051>Limited Lease Time=86400
Run Code Online (Sandbox Code Playgroud)
但是......然后意识到我正在替换任何值,包括低于86400的值,当时我只想更换大于86400的任何值.
我以为我可以使用awk,这种'有点'工作,因为在输出中只有'限制租用时间'行,其值> 86400:
awk -F= '/Limited Lease Time/ && $2 > 86400 { print $2 }'
Run Code Online (Sandbox Code Playgroud)
但是......它只输出匹配的行,而我需要原始输出(示例中为3行),包括修改,如果匹配值> 86400.
感谢一些处理这个问题的建议!
使用=字段分隔符Awk并获取$2大于您设置的值的行,
awk 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > 86400 {$2=86400}1' file
Run Code Online (Sandbox Code Playgroud)
对于输入文件,
cat file
019=False
051=Limited
051>Limited Lease Time=14400
051>Limited Lease Time=94400
051>Limited Time=14400
Run Code Online (Sandbox Code Playgroud)
运行该命令可根据需要生成输出.
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
Run Code Online (Sandbox Code Playgroud)
您也可以使用-v变量import in 进行配置Awk
awk -v thresh=86400 'BEGIN{FS=OFS="="} $0 ~ /\<Limited Lease Time\>/ && $2 > thresh {$2=thresh}1' file
Run Code Online (Sandbox Code Playgroud)