2017-01-27 21 views
2

時才替換值嘗試使用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.

欣賞一些關於處理方式的建議這個 !

回答

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 

您也可以在Awk

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

偉大的工作,感謝使它配置使用-v可變進口!將awk行與'-v'變量導入一起使用,使其在我的腳本中更清晰。謝謝。剛剛閱讀手冊頁,並確定它的功能;-) – kpw