awk 使用 IF 条件替换字段

awk 使用 IF 条件替换字段

我有一个包含值的文本文件

record2 300 IN CNAME Value2
record3 30 IN CNAME Value3
record4 86400 IN CNAME Value4
record5 86400 IN CNAME Value5
record6 900 IN CNAME Value6
record7 1600 IN CNAME Value7
record8 1800 IN CNAME Value8

awk '{ if ($2 > "300") ($2 = 300); print $0}'/tmp/file 给我输出

record2 300 IN CNAME Value2
record3 30 IN CNAME Value3
record4 300 IN CNAME Value4
record5 300 IN CNAME Value5
record6 300 IN CNAME Value6
record7 1600 IN CNAME Value7
record8 1800 IN CNAME Value8

为什么这不会替换 1800 和 1600 字段,即使它们大于 300 ?我想根据 IF 条件替换第二列,你能帮我找出我的错误吗?

答案1

通过"300"用引号括起来,您强制进行词汇(而非数字)比较。要进行数字比较,请省略引号:

awk '{ if ($2 > 300) ($2 = 300); print $0}'

或者更地道

awk '$2 > 300 {$2 = 300} 1'

相关内容