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


24

当我输入:

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

我希望输出是content。为什么呢foo bar


8
尝试$从$ var中删除
taliezin

确实。我对bash语法感到困惑...
nicoco

这是一个很好的问题,尽管答案表明$放错了位置,但我不确定是否应将其打错。我最近看过其中的几本,所以也许我们需要一个经典的书
roaima

Answers:


45

变量的名称引用为in var,而不是$varin awk$nn第一个 字段$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}'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.