如何使Awk在shell脚本中使用Bash数组变量


user=(`cat < usernameSorted.txt`)
for (( i=0; i<${#user[@]}; i++ ))
do
`awk '$1 == "${user[$i]}"{print $NF}' process.txt > CMD$i.txt`
done

这就是我使用用户数组元素作为awk说明符的编码方式。如何在AWK命令中插入${user[$I]}。

正如我在评论中所指出的,您的Awk脚本用单引号括起来;shell变量不会在单引号内展开。总的来说,这很好;$NF不是shell变量之一。

您可能需要使用以下主题的变体:

awk -v user="${user[$i]}" '$1 == user { print $NF }' process.txt > "CMD$i.txt"

其中在命令行中将user称为从"${user[$i]}"设置的Awk变量。


脚本中还有其他一些奇怪之处。<cat不是必需的。你可以通过使用:来避免Bash数组

i=0
for user in $(cat usernameSorted.txt)
do
awk -v user="$user" '$1 == user { print $NF }' process.txt > "CMD$i.txt"
((i++))
done

您不希望在Awk命令周围出现反勾号。幸运的是,您将标准输出重定向到一个文件,因此执行的字符串为空,不会发生任何事情。

相关内容

  • 没有找到相关文章