如何检查awk数组是否为空

时间:2013-11-19 15:43:23

标签: linux unix 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" 
}

我试过这样的事情并且不起作用。建议?

for (var in sourceAndRestricted){
    if (var > 1){
        printf "\t\t"var"\n" 
    }
    else {
        print "NONE"
    }
}

2 个答案:

答案 0 :(得分:8)

使用length()功能检查:

if ( length(sourceAndRestricted) > 0 ) {
    printf "\t\t"var"\n"
}
else
    print "NONE"
}

答案 1 :(得分:7)

$ 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