awk数字比较

时间:2017-04-26 05:25:18

标签: linux unix awk compare

我对awk返回代码感到困惑......

命令:

cat /etc/redhat-release |awk '{print $3 >= 6.5;}'

结果:1​​(应为0或我正在寻找0)

这是我的文件/ etc / redhat-release

cat /etc/redhat-release ->
CentOS release 6.5 (Final)

我对此感到困惑......

帮助......!

cat /etc/redhat-release |awk '{print $3 >= 6.5}'

1

cat /etc/redhat-release |awk '{print $3}'

6.5 

2 个答案:

答案 0 :(得分:2)

您的困惑可能源于您对真假比较所期望的结果。

来自gawk手册;

在awk中,任何非零数值或任何非空字符串值都为true。 任何其他值(零或空字符串,“”)都是false。

换句话说,如果字段不是“0”或“”,则为真。因此,如果您正在寻找(期待)0,那么您希望比较是错误的。

以下内容可以帮助您控制比较,但仍然不会将“0”作为真正比较的结果。

要将字段值强制转换为数值上下文,可以添加零或乘以一。 ($ 3 + 0)或($ 3 * 1)在与数值比较之前。 要将字段值强制转换为字符串上下文,可以使用空字符串连接。记住awk使用空格来连接。 ($ 3“”)

答案 1 :(得分:0)

看起来你打算在版本(字段3)> = 6.5时打印整行。在awk表达式中,条件应位于操作之前,如下所示(不需要cat ... |):

awk '$3 >= 6.5 {print}' /etc/redhat-release

因为print是默认操作,只需awk '$3 >= 6.5' /etc/redhat-release即可(如Inian指出的那样)。

命令

awk '{print $3 >= 6.5}' /etc/redhat-release

给出1的输出,它是表达式的值,因为$3 >= 6.5的计算结果为真。