awk 系列:如何讓 awk 使用 Shell 變數
當我們編寫 shell 指令碼時,我們通常會在指令碼中包含其它小程式或命令,例如 awk 操作。對於 awk 而言,我們需要找一些將某些值從 shell 傳遞到 awk 操作中的方法。
我們可以通過在 awk 命令中使用 shell 變數達到目的,在 awk 系列的這一節中,我們將學習如何讓 awk 使用 shell 變數,這些變數可能包含我們希望傳遞給 awk 命令的值。
有兩種可能的方法可以讓 awk 使用 shell 變數:
1. 使用 Shell 引用
讓我們用一個示例來演示如何在一條 awk 命令中使用 shell 引用來替代一個 shell 變數。在該示例中,我們希望在檔案 /etc/passwd 中搜尋一個使用者名稱,過濾並輸出使用者的賬戶資訊。
因此,我們可以編寫一個 test.sh
指令碼,內容如下:
#!/bin/bash
### 讀取使用者名稱
read -p "請輸入使用者名稱:" username
### 在 /etc/passwd 中搜尋使用者名稱,然後在螢幕上輸出詳細資訊
cat /etc/passwd | awk "/$username/ "' { print $0 }'
然後,儲存檔案並退出。
上述 test.sh
指令碼中 awk 命令的說明:
cat /etc/passwd | awk "/$username/ "' { print $0 }'
"/$username/ "
:該 shell 引用用於在 awk 命令中替換 shell 變數 username
的值。username
的值就是要在檔案 /etc/passwd 中搜尋的模式。
注意,雙引號位於 awk 指令碼 '{ print $0 }'
之外。
接下來給指令碼新增可執行許可權並執行它,操作如下:
$ chmod +x test.sh
$ ./text.sh
執行指令碼後,它會提示你輸入一個使用者名稱,然後你輸入一個合法的使用者名稱並回車。你將會看到來自 /etc/passwd 檔案中詳細的使用者賬戶資訊,如下圖所示:
在 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 在 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
相關文章
- awk使用shell變數變數
- awk引用shell變數變數
- awk中使用shell的環境變數(轉)變數
- awk 系列:怎樣使用 awk 變數、數值表示式以及賦值運算子變數賦值
- awk變數變數
- linux_shell awk中傳遞變數Linux變數
- awk中的變數變數
- Linux Shell Awk獲得外部變數(變數傳值)簡介Linux變數
- 多個變數如何傳到awk中變數
- 『忘了再學』Shell基礎 — 29、AWK內建變數變數
- Linux Awk 內建變數使用介紹Linux變數
- [Shell] awk 陣列(2)陣列
- [Shell] awk 陣列(1)陣列
- awk內建變數NR與FNR使用詳解變數
- shell 中 grep、sed、awk 命令
- awk 語法與內建變數(一)變數
- awk 語法與內建變數(二)變數
- 【shell筆記>命令】grep,sed,awk筆記
- linux之shell awk 之一Linux
- linux之shell awk 之二Linux
- Shell字元操作命令——grep、sed、awk字元
- [Shell] awk學習(1)-pattern{action}
- [Shell] awk學習(2)-pattern{action}
- awk 中的欄位、記錄和變數變數
- [AWK]使用AWK進行分割字串以及擷取字串字串
- awk小技巧之執行shell命令
- [Shell] AWK實現SQL的功能(1)SQL
- [Shell] awk 統計分組資料
- [Shell] awk 實現列轉行例子
- 如何使用awk處理文字內容
- 如何在Linux中使用awk命令Linux
- awk
- Sed&awk筆記之awk篇:快速瞭解Awk(一)筆記
- awk命令使用例項
- [Shell] awk學習(4)-read input file
- [Shell] awk初學之常見問題
- Linux shell工具grep awk cut sort uniq sort 使用小結Linux
- awk命令