変数を印刷しようとしていますが、awkが行全体を印刷するのはなぜですか?

変数を印刷しようとしていますが、awkが行全体を印刷するのはなぜですか?

私が入力したとき:

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

私は結果がcontentfoo bar

答え1

var変数は、inではなく$varinと同じ名前で参照されますawk以下を$n参照n 大地$1最初のフィールド、$22番目...またはフルレコードn== 0($0フルレコード)。

必ずしも文字通りの数字である必要はありません。$(1+1)またはを使用できます$variablevariable含まれている場合は最初のフィールドになります1。通常、最後のフィールド(フィールド数を含む特殊変数)$variableが使用されます。$NFNF

あなたの例のように変数に数字が含まれていない場合数字ではありません0として理解されます。

したがって、はとvar="content"; print $var同じvar=0; print $varですので、はと同じですprint $0。つまり、レコード全体を印刷します。

ここで欲しいものは次のとおりです。

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

関連情報