How to check if the variable value in AWK script is null or empty?

The comparison with "" should have worked, so that's a bit odd

As one more alternative, you could use the length() function, if zero, your variable is null/empty. E.g.,

if (length(val) == 0)

Also, perhaps the built-in variable NF (number of fields) could come in handy? Since we don't have access to your input data it's hard to say though, but another possibility.


You can directly use the variable without comparison, an empty/null/zero value is considered false, everything else is true.

See here :

# setting default tag if not provided
if (! tag) {
        tag="default-tag"
}

So this script will have the variable tag with the value default-tag except if the user call it like this :

$ awk -v tag=custom-tag -f script.awk targetFile

This is true as of : GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)


It works just fine for me

$ awk 'BEGIN{if(val==""){print "null or empty"}}'
null or empty

You can't differentiate between variable being empty and null, when you access "unset" variable, awk just initializes it with default value(here it is "" - empty string). You can use some sort of workaround, for example, setting val_accessed variable to 0 and then to 1 when you access it. Or more simple approach(somewhat "hackish") setting val to "unitialized"(or to some other value which can't appear when running your program).

PS: your script looks strange for me, what are the nested brackets for?