如何允许Awk使用Shell变量 - 第11部分

当我们编写shell脚本,我们通常包括其他小程序或命令,如在我们的脚本awk的操作。 在Awk的情况下,我们必须找到将一些值从shell传递到Awk操作的方法。

这可以通过在Awk命令中使用shell变量来实现,在本系列的这一部分中,我们将学习如何允许Awk使用可能包含要传递给Awk命令的值的shell变量。

有两种方法可以让Awk使用shell变量:

1.使用Shell引用

让我们来看一个例子来说明如何在Awk命令中实际使用shell引用来替换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 }'

此后,保存文件并退出。

在awk命令的解释test.sh上面的脚本:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " - shell引用用于awk命令替换shell变量的值。 用户名的值是在文件/ etc / passwd中要搜索的模式。

请注意,双引号是awk脚本之外, '{ print $0 }'

然后使脚本可执行并运行它如下:

$ chmod  +x  test.sh
$ ./text.sh 

脚本运行之后,系统会提示您输入用户名 ,输入有效的用户名 ,然后按Enter。 你可以从下面的/ etc / passwd文件中查看用户帐户的详细信息:

Shell脚本在密码文件中查找用户名

2.使用Awk的变量赋值

与上述方法相比,该方法更简单和更好。 考虑上面的例子,我们可以运行一个简单的命令来完成这项工作。 根据这种方法,我们使用-v选项将shell变量赋值给一个变量awk中。

首先,创建一个shell变量, username ,并为其分配,我们希望在搜索的名称/etc/passswd文件:

username="aaronkilik"

然后键入以下命令,并按Enter键:

# cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

在密码文件中使用Awk查找用户名

上述命令的说明:

  1. -v - awk的选项来声明一个变量
  2. username -就是shell变量
  3. name -是awk的变量

让我们在仔细一看$0 ~ name的awk脚本里面, ' $0 ~ name {print $0}' 请记住,当我们讨论在第4部分awk的比较操作这一系列的,比较运营商之一,是价值~模式,这意味着:如果真值的模式相匹配。

output($0)cat命令管道输送到awk的模式匹配(aaronkilik)这是我们正在寻找的/ etc / passwd文件的名称,因此,比较操作是真实的。 包含用户帐户信息的行然后打印在屏幕上。

结论

我们已经覆盖了Awk功能的一个重要部分,可以帮助我们在Awk命令中使用shell变量。 很多时候,您将在shell脚本中编写小的Awk程序或命令,因此,您需要清楚地了解如何在Awk命令中使用shell变量。

在Awk系列的下一部分中,我们将深入到Awk功能的另一个关键部分,即流控制语句。 所以保持缄默,让我们继续学习和分享。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏