使用带有 if 和 z 选项的 awk

使用带有 if 和 z 选项的 awk

当我想检查返回值是否为整数时,我在 bash 脚本中使用它:

  if [ -z "$value" ]
    then
    echo 0
    else
    echo $value
  fi

我试图z在 awk 中使用 if 选项。例如我有这一行:

PRIMARY SECONDARY CONNECTED 350 800  

我尝试使用这个:

/bin/awk '{if( -z $1){print "0"}else{print $1}}' script  

无论我$1$2or$3或 or$4替换$5它总是返回0。我是否以错误的方式使用 awk?

答案1

正如其他人所说, 中没有-z测试awk,并且-zshell 中的测试测试空字符串,而不是整数。

awk可以执行以下操作来测试变量是否为空(如果是,则输出零,如果不是,则输出其值):

if (value == "")
    print 0
else
    print value

或者,

print (value == "" ? 0 : value)

例如:

$ awk -F '\t' '{ print ($1 == "" ? 0 : $1) }' file

对于输入中第一个制表符分隔值为空的行打印零,否则打印实际值。

可能相关(如果你想在 中查找变量的类型awk):

答案2

-zshell 不会告诉你“一个值是否为整数”,而是告诉你它的长度是否 > 0。

你可以在 awk 中做同样的事情length——if(length($1)) ...

如果你想检查变量或字段是否是数字awk,你可以这样做:

 if($1+0 || $1~/^[+-]?0/) ...

您的if(-z $1)表达式将简单地否定未设置的变量z,这将产生0,然后将 附加0$1字段,创建一个非空字符串,该字符串将始终被视为 TRUE ,即使 $1是空字符串""或数字0

答案3

尝试

/bin/awk '{if( x$1 == x){print "0"}else{print $1}}' script  

-zawk 中没有选项。

相关内容