使用 grep 过滤文件,从过滤的行中对特定列执行数学运算,仅在包含字符串“value=”的行中,返回第一个 grep 过滤器中的所有行以及完成数学运算的行。
例子:
使用 grep 过滤包含字符串“update”的行,这很简单,我明白了。
输出:
... 列 1 列 2更新 第 4 列 第 5 列 列 1 列 2更新 值= 320 列 1 列 2更新 第 4 列 第 5 列 列 1 列 2更新 值= 210 ...
现在我只需要选择包含字符串“value=”的行并将下一列乘以 25,但仍然得到不包含 value= 字符串的行
输出:
... col1 col2 更新 col4 col5 col1 col2 更新 值= 8000 col1 col2 更新 col4 col5 col1 col2 更新 值= 5250 ...
我尝试过使用 if 语句和 awk,但只返回完成数学运算的行。
答案1
要执行数学运算,您必须使用awk
或更高版本(sed 和 grep 不能执行数学运算)。
替换 awk 中的 grep 非常简单,只需使用正则表达式/update/
:
awk '/update/ { if ($4=="value=") { $5*=25 }; print }' ./file
答案2
我懂了:
awk '$4=="value=" {$5=($5*25)}1' foo