我正在尝试在 if 条件下将 awk 与用户定义的变量($EVENT
,其中$EVENT
是文件名以及文本文件中的列)一起使用,但它似乎无法识别该变量。我尝试过各种组合',',{和(但似乎没有任何效果。
EVENT=19971010_1516.txt
awk '{if ($2=="$EVENT") print $3,$4,$8}' FILENAME.txt > output.txt
可以在awk
命令中使用用户定义的变量吗?如果是这样,语法如何工作?
我正在尝试在 if 条件下将 awk 与用户定义的变量($EVENT
,其中$EVENT
是文件名以及文本文件中的列)一起使用,但它似乎无法识别该变量。我尝试过各种组合',',{和(但似乎没有任何效果。
EVENT=19971010_1516.txt
awk '{if ($2=="$EVENT") print $3,$4,$8}' FILENAME.txt > output.txt
可以在awk
命令中使用用户定义的变量吗?如果是这样,语法如何工作?
您不能$FOO
直接在代码中使用,因为 awk 会认为它是 column FOO
。(FOO 是可变的)。但你的 FOO 是空的。要使用 shell var,请使用-v
:
awk -v event="$EVENT" '{print event}' file
你可以做:
awk '$2==event {print $3,$4,$8}' event="$EVENT" FILENAME.txt > output.txt
awk -v event="$EVENT" '$2==event {print $3,$4,$8}' FILENAME.txt > output.txt
有关更多信息,请参阅此帖子: 如何在 awk 脚本中使用 shell 变量?
如果要在 awk 脚本中逐字包含变量,则需要用双引号将脚本括起来(单引号不会扩展变量)。所以像awk '{if ($2=="'"$EVENT"'") print $3,$4,$8}' FILENAME.txt > output.txt'
. 它在 awk 脚本的其余部分使用单引号以避免需要转义$字符,但随后对事件变量使用双引号。
话虽如此,您几乎肯定希望将 shell 变量作为 awk 变量公开给 awk,这意味着您希望将-v
标志用于 awk。所以像awk -vevent="$EVENT" '{if ($2==event) print $3,$4,$8}' FILENAME.txt > output.txt
. (或者你可以使用类似的东西awk '{if ($2==event) print $3,$4,$8}' event="$EVENT" FILENAME.txt > output.txt
。)
'$2 == event {print $3,$4,$8}'
您还可以通过使用并让模式做它们应该做的事情来稍微简化您的 awk 主体。