我对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
答案 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
的计算结果为真。