awk中的外部变量

时间:2012-11-19 17:13:52

标签: shell awk

我有一个脚本,其中的脚本代码为:

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

外部变量是x

但它会在awk

中提示错误

那么在这种情况下,如何让awk成功运行?

4 个答案:

答案 0 :(得分:21)

您使用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

答案 1 :(得分:9)

为此目的,

awk有一个-v选项,或者@nevelis提到,只需使用双引号:

awk -v x=3 ' $2==x {print $1} '

答案 2 :(得分:2)

GAWK还支持以下语法:

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

一个有趣的用法是:

awk '$2 == x {print $1}' x=3 infile1 x=10 infile2
在这种情况下,{p> x等于3 infile110等于infile2

答案 3 :(得分:0)

使用“” - bash不会替换单引号。

例如:

  

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