当我希望 awk 打印变量时,为什么它会打印整行?

当我希望 awk 打印变量时,为什么它会打印整行?

当我输入:

echo "foo bar" | gawk -v var="content" '{print $var}'

我预计输出是content.为什么foo bar

答案1

变量按名称引用,如 in var,而不是$varin awk$n指的是n 场地$1对于第一个字段,$2对于第二个...或整个记录n== 0 ($0是完整记录)。

这些不一定是字面数字。您可以使用$(1+1)$variable。如果variable包含1,则将$variable是第一个字段。常用的是$NF最后一个字段(NF是包含字段数量的特殊变量)。

如果像您的示例一样,变量不包含数字,那么非数被理解为0。

因此var="content"; print $var, 与 相同var=0; print $var,因此与 相同print $0,即打印整个记录。

你在这里想要的是:

echo "foo bar" | gawk -v var="content" '{print var}'

相关内容