当前位置: 首页 > 科技观察

awk系列:如何让awk使用Shell变量

时间:2023-03-19 20:29:55 科技观察

我们在编写shell脚本的时候,通常会在脚本中包含其他的小程序或者命令,比如awk操作。对于awk,我们需要想办法将shell中的某些值传递给awk操作。我们可以通过在awk命令中使用shell变量来做到这一点,在awk系列的这一期中,我们将学习如何使awk使用shell变量,这些变量可能包含我们想要传递给awk命令的值。有两种可能的方法让awk使用shell变量:1.使用Shell引用让我们用一个例子来说明如何在awk命令中使用shell引用代替shell变量。在这个例子中,我们要在文件/etc/passwd中搜索用户名,过滤并输出用户的帐户信息。因此,我们可以写一个test.sh脚本,内容如下:#!/bin/bash###readusernameread-p"Pleaseenterusername:"username###Searchusernamein/etc/passwd,然后打印屏幕上的详细信息cat/etc/passwd|awk"/$username/"'{print$0}'然后,保存文件并退出。上面test.sh脚本中awk命令的说明:cat/etc/passwd|awk"/$username/"'{print$0}'"/$username/":这个shell引用是用来替换shell变量username的在awk命令值中。username的值是要在文件/etc/passwd中搜索的模式。请注意,双引号位于awk脚本“{print$0}”之外。接下来为脚本添加可执行权限并运行,操作如下:$chmod+xtest.sh$./text.sh运行脚本后会提示输入用户名,然后输入a合法用户名和还车。从/etc/passwd文件中会看到详细的用户账号信息,如下图所示:ShellscripttofindtheusernameinthePasswordfile2.使用awk进行变量赋值与上面介绍的方法相比,该方法更简单更好。考虑到上面的例子,我们可以运行一个简单的命令来完成同样的任务。在此方法中,我们使用-v选项将shell变量的值分配给awk变量。首先,创建一个shell变量username并给它一个我们要在/etc/passwd文件中搜索的名称。username="aaronkilik"然后输入以下命令并回车:#cat/etc/passwd|awk-vname="$username"'$0~name{print$0}'使用awk在密码文件中查找用户名上面的命令解释:-v:awk选项之一,用于声明一个变量$0}'。记得,我们在awk系列第四节介绍awk比较运算符时,value~pattern是比较运算符之一,意思是:如果value匹配pattern,则返回true。cat命令通过管道传输到awk的输出($0)与模式(aaronkilik)匹配,这是我们在/etc/passwd中搜索的名称,***,并且比较返回true。接下来,将包含用户帐户信息的一行输出到屏幕。结论我们已经介绍了awk功能的一个重要部分,它可以帮助我们在awk命令中使用shell变量。很多时候,您会在shell脚本中编写awk小程序或命令,因此您需要清楚地了解如何在awk命令中使用shell变量。在awk系列的下一部分中,我们将深入研究awk功能的另一个关键部分,即流控制语句。所以请继续关注,让我们不断学习和分享。