Linux

過濾文件,在包含特定字元串的行中乘一個值,返回所有行

  • September 25, 2020

使用 grep 過濾文件,從過濾後的行中對特定列進行數學運算,僅在包含字元串“value =”的行中,返回第一個 grep 過濾器中的所有行以及完成數學運算的行.

例子:

使用 grep 過濾包含字元串“update”的行,這很簡單,我明白了。

輸出:

...
col1 col2**更新** col4 col5
col1 col2**更新** 值= 320
col1 col2**更新** col4 col5
col1 col2**更新** 值= 210
...

現在我只需要選擇包含字元串“value=”的行並將下一列乘以 25,但仍然得到沒有 value= 字元串的行

輸出:

...
col1 col2 更新 col4 col5
col1 col2 更新 **值= 8000**
col1 col2 更新 col4 col5
col1 col2 更新 **值= 5250**
...

我嘗試使用 if 語句和 awk,但只返回完成數學運算的行。

我懂了:

awk '$4=="value=" {$5=($5*25)}1' foo

要執行數學運算,您必須使用awk或更高版本(sed 和 grep 不能進行數學運算)。

替換 awk 中的 grep 非常簡單,只需使用正則表達式/update/

awk '/update/ { if ($4=="value=") { $5*=25 }; print }' ./file

引用自:https://unix.stackexchange.com/questions/549932