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

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

次のように入力すると:

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

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

答え1

変数はではvarなく のように名前で参照されます。は番目を参照します。$varawk$nn 分野:$1最初のフィールドの場合は 、 2 番目のフィールドの場合は 、または== 0$2の場合はレコード全体(は完全なレコード)。n$0

これらはリテラルな数値である必要はありません。$(1+1)または を使用できます$variablevariableが含まれている場合1、 は$variable最初のフィールドになります。よく使用されるのは、$NF最後のフィールド用です (NFはフィールドの数を含む特別な変数です)。

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

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

ここで必要なのは次の通りです:

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

関連情報