次のように入力すると:
echo "foo bar" | gawk -v var="content" '{print $var}'
出力は になると予想していますcontent
。なぜでしょうかfoo bar
?
答え1
変数はではvar
なく のように名前で参照されます。は番目を参照します。$var
awk
$n
n
分野:$1
最初のフィールドの場合は 、 2 番目のフィールドの場合は 、または== 0$2
の場合はレコード全体(は完全なレコード)。n
$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}'