如何检查AWK脚本中的变量值是null还是空?

sam*_*rth 40 unix awk

  1. 我使用AWK脚本来处理一些日志.
  2. 在一个地方,我需要检查变量值是null还是来做出决定.

任何想法如何实现相同?

awk '

{
    {
       split($i, keyVal, "@")
       key=keyVal[1];
       val=keyVal[2];
       if(val ~ /^ *$/)
       val="Y";

    }

}

' File
Run Code Online (Sandbox Code Playgroud)

我试过了

1) if(val == "")

2) if(val ~ /^ *$/)
Run Code Online (Sandbox Code Playgroud)

两种情况都不起作用.

Lev*_*von 49

与之比较""应该有效,所以有点奇怪

作为另一种选择,您可以使用该length()函数,如果为零,则您的变量为null/empty.例如,

if (length(val) == 0)
Run Code Online (Sandbox Code Playgroud)

此外,也许内置变量NF(字段数)可以派上用场?由于我们无法访问您的输入数据,因此很难说,但另一种可能性.


Ale*_*lin 12

它对我来说很好

$ awk 'BEGIN{if(val==""){print "null or empty"}}'
null or empty
Run Code Online (Sandbox Code Playgroud)

你无法区分变量为空和null,当你访问"unset"变量时,awk只是用默认值初始化它(这里是""- 空字符串).您可以使用某种解决方法,例如,将val_accessed变量设置为0,然后1在您访问它时.或者更简单的方法(有点"hackish")将val设置为"unitialized"(或运行程序时不能出现的其他值).

PS:你的脚本对我来说很奇怪,嵌套括号是什么?


Adr*_*n H 9

你可以直接使用变量而不进行比较,考虑空/ null /零值false,其他一切都是true.

看这里 :

# setting default tag if not provided
if (! tag) {
        tag="default-tag"
}
Run Code Online (Sandbox Code Playgroud)

因此tag,default-tag除非用户像这样调用它,否则此脚本将具有值的变量:

$ awk -v tag=custom-tag -f script.awk targetFile
Run Code Online (Sandbox Code Playgroud)

这是正确的:GNU Awk 4.1.3,API:1.1(GNU MPFR 3.1.4,GNU MP 6.1.0)