如何检查awk数组是否为空

Vin*_*ros 4 unix linux awk

我是AWK的新手,并试图确定我的阵列是否为空,所以如果是这样我可以打印一条消息.通常我习惯于长度函数,可以像这样检查,但似乎AWK没有.这是我的工作代码,如果解析完所有数据后数组中没有任何内容,我只想打印出不同的消息.

#add to array if condition is met
if ($2 == "SOURCE" && $4 == "RESTRICTED"){
    sourceAndRestricted[$3]++;
}
#print out array
for (var in sourceAndRestricted){
    printf "\t\t"var"\n" 
}
Run Code Online (Sandbox Code Playgroud)

香港专业教育学院尝试过类似的东西,它不起作用 建议?

for (var in sourceAndRestricted){
    if (var > 1){
        printf "\t\t"var"\n" 
    }
    else {
        print "NONE"
    }
}
Run Code Online (Sandbox Code Playgroud)

Bir*_*rei 8

检查length()功能:

if ( length(sourceAndRestricted) > 0 ) {
    printf "\t\t"var"\n"
}
else
    print "NONE"
}
Run Code Online (Sandbox Code Playgroud)

  • `length(array)`被认为是gawk中的扩展,我听说它在OSX awk中工作,但它绝对不可移植. (2认同)

Ed *_*ton 8

$ cat tst.awk
function isEmpty(arr, idx) {for (idx in arr) return 0; return 1}

BEGIN {
   map[3] = 27

   print isEmpty(map)

   delete map[3]

   print isEmpty(map)
}
$ awk -f tst.awk
0
1
Run Code Online (Sandbox Code Playgroud)