如果未设置变量,如何设置变量的默认值,以下是详细信息
像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
答案 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