linux - 如何让 Awk 在 shell 脚本中使用 Bash 数组变量?

标签 linux shell ubuntu awk

user=(`cat < usernameSorted.txt`)
for (( i=0; i<${#user[@]}; i++ ))
do
    `awk '$1 == "${user[$i]}"{print $NF}' process.txt > CMD$i.txt`
done
这就是我使用用户数组元素作为 awk 说明符的编码方式。如何将 ${user[$i]} 插入 AWK 命令。

最佳答案

正如我在 comment 中指出的那样,你的 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 命令周围出现反引号。幸运的是,您将标准输出重定向到一个文件,因此执行的字符串为空,并且没有任何 react 。

关于linux - 如何让 Awk 在 shell 脚本中使用 Bash 数组变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67680190/

相关文章:

python - 愚弄Python,它是从tty调用的

c++ - 代码块上的 Valgrind (linux)

linux - Bash - for循环中的多个条件

linux - 在 termux 中安装 Octave, "Unable to correct problems, you have held broken packages"

linux - 循环直到在列表中选择

Qt3D "qt.glx: qglx_findConfig: Failed to finding matching FBConfig"警告

python - 无法在端口 80 上运行 Ec2-server

linux - 在 Fedora 26 上安装 mbstring

ubuntu - 如何在 Linux 虚拟实例上挂载外部卷?

ubuntu - ubuntu 的 .pac 文件 - 命令行