bash - awk 中 shell 变量的用法

标签 bash shell awk

我目前在 awk 使用 shell 变量时遇到问题。这是我的问题, 当我运行以下命令时:

awk -F: '$1=="marco" {print $7}' /etc/passwd

一切都运转良好,花花公子。但是,我希望能够传递我的 $user shell 变量而不是“marco”,因此我尝试以下操作(在阅读有关 -v 标志后):

awk -F: -v awkvar=$user '$1=="$awkvar" {print $7}' /etc/passwd

而且似乎不起作用。谁能帮我吗?

谢谢!

最佳答案

在 shell 端使用引号,不要使用 $ 作为 awk 变量。

awk -F: -v awkvar="$user" '$1==awkvar {print $7}' /etc/passwd

awk中,$表示它是一个位置参数(即字段编号),因此它正在寻找字段“marco”,这减少了到 $0,整行。因此它会找到任何只有一个字段的行。

关于bash - awk 中 shell 变量的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10214881/

相关文章:

bash - 在 VSCode 终端中运行 msys2 shell

linux - 从 crontab 调用时变量不返回值

shell - 如何将转义的 Jenkins 参数传递给 Fabric?

linux - 在 shell 脚本中使用标准输入

linux - 打开和编辑文件对另一个文件也有效

bash - 使用 Bash 重命名文件,删除前缀和后缀

linux - shell位移产生不同的数字

linux - 变量不通过 ssh 存储值

linux - Emacs...作为您的默认 shell ?

json - 使用命令行工具对 JSON/JavaScript 元组进行排序