【发布时间】:2014-10-16 09:48:46
【问题描述】:
我正在尝试使用 awk 通过循环遍历 bash 数组的元素来搜索文件。这就是我目前正在做的事情
myarray[1] = 441
myarray[2] = 123
for i in "${myarray[@]}"
do
awk '{if ($4 == '"$i"') print $0}' myfile.txt > newfile.txt
done
这种方式可以在awk中访问bash数组的元素吗?
【问题讨论】:
-
您没有访问那里的数组元素。您正在访问一个普通的 shell 变量。是的,假设您在 awk 上下文中引用该字符串(即您需要
"'"$i"'"而不仅仅是'"$i"'),这很好。 -
似乎不起作用,我已将 "'"$i"'" 替换为我知道在文件中的 "441",这有效。所以我认为问题仍然在于定义循环中的元素。
-
修复引用后,请注意
awk仍然不是“访问shell 变量”。相反,您在传递给 awk 的字符串中使用 shell 变量的值。$i的值在awk命令执行之前被shell 扩展。 -
您的扩展
"${myarray[@]}'"中的右引号之前有一个额外的单引号,这可能是您搞砸的原因。 -
我已经删掉了多余的单引号,这不是我搞砸的原因。