awk中的外部变量

wen*_*nzi 16 shell awk

我有一个脚本,其中的脚本片段是:

x=3
awk '$2=$x{print $1}' infile
Run Code Online (Sandbox Code Playgroud)

外部变量是x,

但它会引发错误 awk

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

sam*_*hen 23

您通过使用一个外部变量awk-v选项:

some_variable=3
awk -v x=$some_variable '$2 == x {print $1}' infile
Run Code Online (Sandbox Code Playgroud)

另请注意,您需要将代码更改$2=$x$2 == x

  • ==改为使用=:后者是赋值
  • 不要$awk脚本内部加上正常变量的前缀.

旁白:您需要为-v要传入的每个变量指定一个,例如:

var1=2
var2=4
awk -v x=$var1 -v y=$var2 '$2 == x {print y " " $1}' infile
Run Code Online (Sandbox Code Playgroud)

  • 嗯,不完全一样。前者不允许您添加需要访问变量的 BEGIN 部​​分,后者不允许您在文件之间更改变量的初始值。恕我直言,使用 -v 通常是您想要的。 (2认同)

twa*_*erg 9

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

awk -v x=3 ' $2==x {print $1} '
Run Code Online (Sandbox Code Playgroud)


nev*_*lis -1

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

例如:

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

  • 如果“awk”脚本中有很多 shell 元字符,情况很快就会变得很糟糕,而且通常都会有一些。 (4认同)
  • 不要这样做,它会产生许多令人讨厌的副作用,具体取决于您的变量设置。 (4认同)