スクリプトのスニペットは次のとおりです。
x=3
awk '$2=$x{print $1}' infile
外部変数はx
、
しかし、それはエラーを促しますawk
では、この状況で、awk
正常に実行するにはどうすればよいでしょうか?
オプションで使用awk
する外部変数を渡します。-v
some_variable=3
awk -v x=$some_variable '$2 == x {print $1}' infile
$2=$x
また、コードをからに変更する必要があることにも注意してください$2 == x
==
代わりに使用し=
てください:後者は割り当てです$
内で通常の変数のプレフィックスを付けないでください。awk
-v
余談ですが、渡す変数ごとに1つ指定する必要があります。例:
var1=2
var2=4
awk -v x=$var1 -v y=$var2 '$2 == x {print y " " $1}' infile
awk
この目的のためのオプションがあり-v
ます。または@nevelisが言及しているように、二重引用符を使用してください:
awk -v x=3 ' $2==x {print $1} '
Use "" - bash won't substitute single quotes.
Eg:
x=3 awk "\$2=$x{print \$1}" infile
set -a
x=3
awk '$2==ENVIRON["x"]{print $1}' infile