AWK:替换并在输入文件中写入列值

Shu*_*ams 12 awk

如果$ 3> 100,我试图替换输入文件的$ 3列值.我试过:

awk 'BEGIN {FS="\t"} {if($3 > 100) $3=$3/100;print}' test.stat
Run Code Online (Sandbox Code Playgroud)

这会输出对stdout的正确更改,但是,我需要更改以写入输入文件(test.stat),以便其余字段/记录的值保持不变.有什么建议吗?

谢谢.另一个问题出现了.我有一个"计数器"变量,其总和需要在END块中打印,我试过:

awk 'BEGIN {FS="\t",counter=0} 
{if($3 > 100) $3=$3/100;print else counter++}
END{print counter}' test.stat > ...
Run Code Online (Sandbox Code Playgroud)

现在,只有计数器值写入文件而不是$ 3值.如何将两个输出分开,以便使用read命令修改文件,另一个保存为bash变量.谢谢.

And*_*als 10

Awk不是为了就地编辑东西而设计的.它旨在处理数据并将其写入stdout(或其他文件).你可以这样做:

$ 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
Run Code Online (Sandbox Code Playgroud)