尴尬数字比较



我与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 

您的混乱可能源于您从真或错误比较中期望的结果。

摘自《 Gawk手册》;

在尴尬中,任何非零数值或任何非空字符串值都是正确的。任何其他值(零或零字符串"(都是错误的。

换句话说,如果字段不是" 0"或",则是真的。因此,如果您正在寻找(期望(0,则期望比较是错误的。

以下可能有助于您控制比较,但仍然不会使" 0"成为真实比较的结果。

要将字段值强制为数字上下文,您可以添加零或乘以一个。($ 3 0(或($ 3 * 1(与数字值进行比较之前。要将字段值强制到字符串上下文中,您可以与一个空字符串连接。请记住,Awk使用空白空间来连接。($ 3"(

看起来您的意图是在版本(字段3(为> = 6.5时打印整个行。在awk表达式中,条件应像这样的动作之前(不需要cat ... |(:

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

由于打印是默认操作,因此只有 awk '$3 >= 6.5' /etc/redhat-release就足够了(正如inian指出的那样(。

命令

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

给出1的输出,这是表达式的值,因为$3 >= 6.5评估为true。

相关内容

  • 没有找到相关文章

最新更新