网站搜索

如何允许 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}'

上述命令的解释:

  1. -v – 用于声明变量的 awk 选项
  2. username – 是 shell 变量
  3. 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 功能的另一个关键部分,即流控制语句。因此,请继续关注,让我们继续学习和分享。