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

标签 awk

如果 $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/

相关文章:

c - 如何使用shell脚本比较两个文件,一个具有不同的字段,另一个是c文件?

regex - 提取单词并将其放在行首

linux - 如何使用 shell 脚本删除 CSV 文件中多行中常见的特定字符串?

regex - 逐行解析文件中的关键字符并复制行

linux - 打印文件中不以散列开头的所有行,并按特定列过滤

awk - 使用awk过滤文本文件

linux - 用于查找和调整图像大小的 Shell 脚本

unix - 如何检查AWK脚本中的变量值是否为null或空?

linux - 在 Linux 上重命名多个文件同时保持相同的扩展名

unix - 有没有办法根据特定列提取所有重复记录?