変数を出力したいのに、なぜawkは行全体を出力するのですか?


24

入力するとき:

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

出力はになると予想していますcontent。なぜfoo barですか?


8
$$ varから削除してみてください
タリエジン

確かに。bash構文と混同しました
...-nicoco

それは良い質問であり、答えは$が間違っていたことを示していますが、タイプミスとして閉じるべきかどうかはわかりません。これらのいくつかを最近見たので、おそらく正規のものが必要です
-roaima

回答:


45

変数は、varではなく$varinの名前で参照されawkます。th フィールドを$n参照します。最初のフィールド、2番目のフィールド、または== 0のレコード全体(完全なレコードです)。n $1$2n$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}'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.