Linux|如何允许 awk 使用 Shell 变量
引言
当我们编写 shell 脚本时,我们通常会在脚本中包含其他较小的程序或命令,例如 awk 操作。就 Awk 而言,我们必须找到将一些值从 shell 传递到 Awk 操作的方法。
这可以通过在 Awk 命令中使用 shell 变量来完成,在本文中,我们将学习如何允许 Awk 使用 shell 变量,这些变量可能包含我们想要传递给 Awk 命令的值。
可能有两种方法可以让 Awk 使用 shell 变量:
1. 使用 Shell 引用
让我们看一个示例来说明如何实际使用 shell 引用来替换 Awk 命令中 shell 变量的值。在这个例子中,我们要在文件/etc/passwd中搜索用户名,过滤并打印用户的帐户信息。
因此,我们可以编写一个test.sh脚本,内容如下:
#!/bin/bash
#read user input
read -p "Please enter username:" username
#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'
此后,保存文件并退出。上面test.sh脚本中awk命令的解释:
cat /etc/passwd | awk "/$username/ "' { print $0 }'
"/0 }”之外。
然后使脚本可执行并运行它,如下所示:
chmod +x test.sh
./text.sh
运行脚本后,系统将提示您输入用户名,输入有效的用户名并按 Enter 键。您将从 /etc/passwd 文件中查看用户的帐户详细信息,如下所示:
![](https://img.haomeiwen.com/i2250248/706daccf2ab6be10.png)
2. 使用awk的变量赋值
与上面的方法一相比,这种方法更简单、更好。考虑上面的例子,我们可以运行一个简单的命令来完成这项工作。在此方法下,我们使用 -v 选项将 shell 变量分配给 Awk 变量。
首先,创建一个 shell 变量 username 并为其指定我们要在 /etc/passswd 文件中搜索的名称:
username="aaronkilik"
然后输入以下命令并按 Enter 键:
cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'
![](https://img.haomeiwen.com/i2250248/8073f0f56c9690bd.png)
上述命令的解释:
- -v – 用于声明变量的 awk 选项
- username – 是 shell 变量
- name – 是 Awk 变量
让我们仔细看看 Awk 脚本中的 0 ~ name {print
0)与我们在 /etc/passwd 中搜索的名称模式 (aaronkilik) 匹配,因此,比较操作为 true。然后,包含用户帐户信息的行将打印在屏幕上。
总结
我们已经介绍了 Awk 功能的一个重要部分,它可以帮助我们在 Awk 命令中使用 shell 变量。很多时候,您会在 shell 脚本中编写小型 Awk 程序或命令,因此,您需要清楚地了解如何在 Awk 命令中使用 shell 变量。