如何允许 awk 使用 Shell 变量 - 第 11 部分
当我们编写 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 }'
"/$username/ "
– shell 引用用于替换 Awk 命令中 shell 变量 username 的值。 username 的值是要在文件 /etc/passwd 中搜索的模式。
请注意,双引号位于 Awk 脚本之外,‘{ print $0 }’
。
然后使脚本可执行并按如下方式运行:
chmod +x test.sh
./text.sh
运行脚本后,系统将提示您输入用户名,输入有效的用户名并按Enter。您将从 /etc/passwd 文件中查看用户的帐户详细信息,如下所示:
2. 使用awk的变量赋值
与上面的方法一相比,这种方法更简单、更好。考虑上面的例子,我们可以运行一个简单的命令来完成这项工作。在此方法下,我们使用 -v
选项将 shell 变量分配给 Awk 变量。
首先,创建一个 shell 变量 username
并为其指定我们要在 /etc/passswd
文件中搜索的名称:
username="aaronkilik"
然后输入以下命令并按 Enter 键:
cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'
上述命令的解释:
-v
– 用于声明变量的 awk 选项username
– 是 shell 变量name
– 是 Awk 变量
让我们仔细看看awk脚本中的$0 ~ name
,'$0 ~ name {print $0}'
。请记住,当我们在本系列的第 4 部分中介绍 Awk 比较运算符时,比较运算符之一是 value ~
模式,这意味着:如果 value 与模式匹配,则为 true。
通过管道传输到 Awk 的 cat 命令的 output($0)
与模式 (aaronkilik)
匹配,这是我们在 /etc/passwd 中搜索的名称>,结果,比较运算为真。然后,包含用户帐户信息的行将打印在屏幕上。
结论
我们已经介绍了 Awk 功能的一个重要部分,它可以帮助我们在 Awk 命令中使用 shell 变量。很多时候,您会在 shell 脚本中编写小型 Awk 程序或命令,因此,您需要清楚地了解如何在 Awk 命令中使用 shell 变量。
在 Awk 系列的下一部分中,我们将深入探讨 Awk 功能的另一个关键部分,即流控制语句。因此,请继续关注,让我们继续学习和分享。