如何在awk中设置和打印变量的默认值

时间:2018-12-19 17:07:32

标签: awk

如果未设置变量,如何设置变量的默认值,以下是详细信息

像bash一样:

x=1
echo ${x}
1
unset x
echo "${x:-I AM DEFAULT}"

如何在awk中实现这种行为:

示例:

 -->echo "$x"
one two three four
foo bla2 bla3 bla4
bar bla7 bla8

所需结果:

echo "$x" |awk '..'
bla2 bla3 bla4 bla7 NA bla8

当前输出:

echo "$x" |awk '/foo/{two=$2;three=$3;four=$4;next} /bar/{print two , three, four, $2,$3,$4} '
bla2 bla3 bla4 bla7 bla8

无法做到:(由于绝望而愚蠢):

echo "$x" |awk '/foo/{two=$2;three=$3;four=$4;next} /bar/{print two , three, four, $2,${3:-NA},$4} '

OR

对于awk $3为bla8,因此这也不起作用。

echo "$x" |awk '/foo/{two=$2;three=$3;four=$4;next} /bar/{if(!length($3))print two , three, four, $2,$3,"NA",$4;print two , three, four, $2,$3,$4} '
bla2 bla3 bla4 bla7 bla8

1 个答案:

答案 0 :(得分:2)

在这里您不会丢失任何中间值,因为字段只会向左移动。您可以采用两种方法,分别从字段NF的数量中设置缺失值。或者,使用一些空值替代。这是后者的示例:

$ awk 'function nvl(x) {return x==""?"NA":x} {print nvl($1), nvl($2), nvl($3)}'


$ echo a b | awk ...
a b NA

$ echo a | awk ...
a NA NA

$ echo "" | awk ...
NA NA NA