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中國 榮譽推出

相關文章
相關標籤/搜索