当我想检查返回值是否为整数时,我在 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
用$2
or$3
或 or$4
替换$5
它总是返回0
。我是否以错误的方式使用 awk?
答案1
正如其他人所说, 中没有-z
测试awk
,并且-z
shell 中的测试测试空字符串,而不是整数。
您awk
可以执行以下操作来测试变量是否为空(如果是,则输出零,如果不是,则输出其值):
if (value == "")
print 0
else
print value
或者,
print (value == "" ? 0 : value)
例如:
$ awk -F '\t' '{ print ($1 == "" ? 0 : $1) }' file
对于输入中第一个制表符分隔值为空的行打印零,否则打印实际值。
可能相关(如果你想在 中查找变量的类型awk
):
答案2
-z
shell 不会告诉你“一个值是否为整数”,而是告诉你它的长度是否 > 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
-z
awk 中没有选项。