21

スクリプトのスニペットは次のとおりです。

x=3
awk '$2=$x{print $1}' infile

外部変数はx

しかし、それはエラーを促しますawk

では、この状況で、awk正常に実行するにはどうすればよいでしょうか?

4

5 に答える 5

27

オプションで使用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
于 2012-11-19T17:32:08.423 に答える
9

awkこの目的のためのオプションがあり-vます。または@nevelisが言及しているように、二重引用符を使用してください:

awk -v x=3 ' $2==x {print $1} '
于 2012-11-19T17:32:36.267 に答える
0

Use "" - bash won't substitute single quotes.

Eg:

x=3 awk "\$2=$x{print \$1}" infile

于 2012-11-19T17:15:50.817 に答える
0
set -a    
x=3
awk '$2==ENVIRON["x"]{print $1}' infile
于 2014-11-28T19:07:24.370 に答える