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要传入的每个变量指定一个,例如:

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 回答
2

GAWK 还支持以下语法:

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

一个有趣的用法是:

awk '$2 == x {print $1}' x=3 infile1 x=10 infile2

在这种情况下x将等于3forinfile1和等于10forinfile2

于 2014-09-23T14:33:33.273 回答
0
set -a    
x=3
awk '$2==ENVIRON["x"]{print $1}' infile
于 2014-11-28T19:07:24.370 回答
0

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

Eg:

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

于 2012-11-19T17:15:50.817 回答