当我们编写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查找用户名
上述命令的说明:
-
-v
- awk的选项来声明一个变量 -
username
-就是shell变量 -
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功能的另一个关键部分,即流控制语句。 所以保持缄默,让我们继续学习和分享。