我有一个脚本,其中的脚本片段是:
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
将等于3
forinfile1
和等于10
forinfile2
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