簡體   English   中英

大於/小於所有行的awk sed過濾器值

[英]awk sed filter values in all lines greater/smaller than

有沒有一種方法可以在awk(或類似方式)中為給定文件構造過濾器,例如:

0.99,0.98,1.1,0.85,0.92
0.76,1.4,0.99,0.99,0.82
1.0,1.45,0.78,0.91,0.95

將大於1.0的行中的任何記錄替換為1.0?

這是您可以使用awk

awk -F, '{for(i=1;i<=NF;i++) if($i>1) {$i="replacement"}}1' OFS=, file

測試:

$ cat file
0.99,0.98,1.1,0.85,0.92
0.76,1.4,0.99,0.99,0.82
1.0,1.45,0.78,0.91,0.95

$ awk -F, '{for(i=1;i<=NF;i++) if($i>1) {$i="replacement"}}1' OFS=, file
0.99,0.98,replacement,0.85,0.92
0.76,replacement,0.99,0.99,0.82
1.0,replacement,0.78,0.91,0.95

這是一個sed解決方案:

sed -e 's/[1-9][0-9]*\.[0-9]*/1.0/g' in-file > out-file

模式[1-9][0-9]*\\.[0-9]*僅匹配以大於0的數字開頭,后接零個或多個數字,后接小數點,再加上其他任何序列數字。 如果要就地替換,可以使用-i選項:

sed -i -e 's/[1-9][0-9]*\.[0-9]*/1.0/g' in-file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM