将循环索引传递给awk

时间:2016-08-08 20:23:15

标签: shell awk

我正在尝试将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中字符串的行。

2 个答案:

答案 0 :(得分:2)

有两个问题:

  1. 数组遍历应该与此for i in "${myarray[@]}"
  2. 类似
  3. awk/.../之间的文字视为正则表达式文字,以使用变量$0 ~ var
  4. 您的代码应为:

    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