如果 $3 > 100,我试图替换输入文件的 $3 列值。我试过:
awk 'BEGIN {FS="\t"} {if($3 > 100) $3=$3/100;print}' test.stat
这会输出对标准输出的正确更改,但是,我需要将更改写入输入文件 (test.stat),以便其余字段/记录的值保持不变。有什么建议吗?谢谢。另一个问题出现了。我有一个“计数器”变量,其总和需要打印在 END 块中,我试过:
awk 'BEGIN {FS="\t",counter=0}
{if($3 > 100) $3=$3/100;print else counter++}
END{print counter}' test.stat > ...
现在,只有计数器值被写入文件,而不是 $3 值。如何将两个输出分开,以便一个修改文件,另一个使用 read 命令保存为 bash 变量。谢谢。
最佳答案
Awk 并非旨在就地编辑内容。它旨在处理数据并将其写入标准输出(或其他文件)。你可以这样做:
$ awk 'BEGIN {FS="\t"} {if($3 > 100) $3=$3/100;print}' test.stat > test.stat.new \
&& mv test.stat test.stat.old && mv test.stat.new test.stat
关于AWK:替换并写入输入文件中的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9705940/