我有一个脚本,其中的脚本片段是:
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要传入的每个变量指定一个,例如:
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} '
GAWK 还支持以下语法:
awk '$2 == x {print $1}' x=3 infile
一个有趣的用法是:
awk '$2 == x {print $1}' x=3 infile1 x=10 infile2
在这种情况下x将等于3forinfile1和等于10forinfile2
set -a
x=3
awk '$2==ENVIRON["x"]{print $1}' infile
Use "" - bash won't substitute single quotes.
Eg:
x=3 awk "\$2=$x{print \$1}" infile