我有一个脚本,其中的脚本代码为:
x=3
awk '$2=$x{print $1}' infile
外部变量是x
,
但它会在awk
那么在这种情况下,如何让awk
成功运行?
答案 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
infile1
,10
等于infile2
答案 3 :(得分:0)
使用“” - bash不会替换单引号。
例如:
x = 3 awk“\ $ 2 = $ x {print \ $ 1}”infile