任何想法如何实现同样的目标?
awk '
{
{
split($i, keyVal, "@")
key=keyVal[1];
val=keyVal[2];
if(val ~ /^ *$/)
val="Y";
}
}
' File
我试过
1) if(val == "")
2) if(val ~ /^ *$/)
两种情况都不起作用。
答案 0 :(得分:45)
与""
的比较应该有效,所以有点奇怪
作为另一种选择,您可以使用length()
函数,如果为零,则您的变量为null / empty。如,
if (length(val) == 0)
另外,也许内置变量NF
(字段数)可以派上用场?由于我们无法访问您的输入数据,因此很难说,但另一种可能性。
答案 1 :(得分:11)
它适用于我
$ awk 'BEGIN{if(val==""){print "null or empty"}}'
null or empty
你无法区分变量为空和null,当你访问“unset”变量时,awk只是用默认值初始化它(这里是""
- 空字符串)。您可以使用某种解决方法,例如,将val_accessed
变量设置为0
,然后在访问时设置为1
。或者更简单的方法(有些“hackish”)将val设置为"unitialized"
(或者运行程序时无法显示的其他值)。
PS:你的脚本对我来说很奇怪,什么是嵌套括号?
答案 2 :(得分:8)
您可以直接使用变量而不进行比较,将空/ null /零值视为false
,其他所有值均为true
。
见这里:
# setting default tag if not provided
if (! tag) {
tag="default-tag"
}
所以这个脚本的变量tag
的值为default-tag
,除非用户这样调用它:
$ awk -v tag=custom-tag -f script.awk targetFile
以下情况属实: GNU Awk 4.1.3,API:1.1(GNU MPFR 3.1.4,GNU MP 6.1.0)