我正在尝试将for循环索引i传递给awk,但不断收到意外的令牌awk错误。
首先我尝试在awk中使用-v选项:
for i in "${myarray}"
awk -v var=$i '/var/{print}' myfile.dat
done
我也尝试使用单引号直接调用变量:
for i in "${myarray}"
awk '/'"$i"'/{print}' myfile.dat
done
我的最终目标是学习如何通过awk作为搜索模式传递for循环索引变量。我希望以上代码搜索myfile.dat
并打印包含myarray
中字符串的行。
答案 0 :(得分:2)
有两个问题:
for i in "${myarray[@]}"
awk
将/.../
之间的文字视为正则表达式文字,以使用变量$0 ~ var
。您的代码应为:
for i in "${myarray[@]}"; do
awk -v var="$i" '$0 ~ var' myfile.dat
done
{print}
是awk
中的默认操作,您可以省略,如上所示。
答案 1 :(得分:0)
你也可以做同样的循环,例如,
echo "${myarray[@]}" | tr ' ' '|' | awk 'NR==FNR{pat=$0; next} $0 ~ pat' - file