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

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

当咱们编写 shell 脚本时,咱们一般会在脚本中包含其它小程序或命令,例如 awk 操做。对于 awk 而言,咱们须要找一些将某些值从 shell 传递到 awk 操做中的方法。linux

咱们能够经过在 awk 命令中使用 shell 变量达到目的,在 awk 系列的这一节中,咱们将学习如何让 awk 使用 shell 变量,这些变量可能包含咱们但愿传递给 awk 命令的值。git

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

有两种可能的方法可让 awk 使用 shell 变量:github

1. 使用 Shell 引用

让咱们用一个示例来演示如何在一条 awk 命令中使用 shell 引用来替代一个 shell 变量。在该示例中,咱们但愿在文件 /etc/passwd 中搜索一个用户名,过滤并输出用户的帐户信息。shell

所以,咱们能够编写一个 test.sh 脚本,内容以下:小程序

#!/bin/bash

### 读取用户名
read -p "请输入用户名:" username

### 在 /etc/passwd 中搜索用户名,而后在屏幕上输出详细信息
cat /etc/passwd | awk "/$username/ "' { print $0 }'

而后,保存文件并退出。bash

上述 test.sh 脚本中 awk 命令的说明:ide

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

"/$username/ ":该 shell 引用用于在 awk 命令中替换 shell 变量 username 的值。username 的值就是要在文件 /etc/passwd 中搜索的模式。学习

注意,双引号位于 awk 脚本 '{ print $0 }' 以外。code

接下来给脚本添加可执行权限并运行它,操做以下:ip

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

运行脚本后,它会提示你输入一个用户名,而后你输入一个合法的用户名并回车。你将会看到来自 /etc/passwd 文件中详细的用户帐户信息,以下图所示:

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

在 Password 文件中查找用户名的 shell 脚本

2. 使用 awk 进行变量赋值

和上面介绍的方法相比,该方法更加单,而且更好。考虑上面的示例,咱们能够运行一条简单的命令来完成一样的任务。
在该方法中,咱们使用 -v 选项将一个 shell 变量的值赋给一个 awk 变量。

首先,建立一个 shell 变量 username,而后给它赋予一个咱们但愿在 /etc/passwd 文件中搜索的名称。

username="aaronkilik"

而后输入下面的命令并回车:

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

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

使用 awk 在 Password 文件中查找用户名

上述命令的说明:

  • -v:awk 选项之一,用于声明一个变量
  • username:是 shell 变量
  • name:是 awk 变量

让咱们仔细瞧瞧 awk 脚本 ' $0 ~ name {print $0}' 中的 $0 ~ name。还记得么,当咱们在 awk 系列第四节中介绍 awk 比较运算符时,value ~ pattern 即是比较运算符之一,它是指:若是 value 匹配了 pattern 则返回 true

cat 命令经过管道传给 awk 的 output($0) 与模式 (aaronkilik) 匹配,该模式即为咱们在 /etc/passwd 中搜索的名称,最后,比较操做返回 true。接下来会在屏幕上输出包含用户帐户信息的行。

结论

咱们已经介绍了 awk 功能的一个重要部分,它能帮助咱们在 awk 命令中使用 shell 变量。不少时候,你都会在 shell 脚本中编写小的 awk 程序或命令,所以,你须要清晰地理解如何在 awk 命令中使用 shell 变量。

在 awk 系列的下一个部分,咱们将会深刻学习 awk 功能的另一个关键部分,即流程控制语句。因此请继续保持关注,并让咱们坚持学习与分享。


via: http://www.tecmint.com/use-shell-script-variable-in-awk/

做者:Aaron Kili
译者:ChrisLeeGit
校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关文章
相关标签/搜索