我正在尝试在if条件中使用awk和用户定义的变量($EVENT
,其中$EVENT
是文件名,也是文本文件中的列),但它不是似乎认识到变量。我尝试了各种组合',',{和(但似乎没什么用。
EVENT=19971010_1516.txt
awk '{if ($2=="$EVENT") print $3,$4,$8}' FILENAME.txt > output.txt
可以在awk命令中使用用户定义的变量吗?如果是这样,语法如何工作?
答案 0 :(得分:1)
您无法在代码中直接使用$FOO
,因为awk会认为它是列FOO
。 (FOO是可变的)。但你的FOO是空的。要使用shell var,请使用-v
,如:
awk -v event="$EVENT" '{print event}' file
答案 1 :(得分:0)
如果你想在字面上包含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身体,让模式做他们应该做的事情。
答案 2 :(得分:0)
你可以这样做:
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