Awk#
Linux 的 awk 套件主要由 GNU 專案維護,屬於 GNU gawk 工具集的一部分。
awk 是一個「以欄位為核心的文字處理語言」,主要用途是從結構化文字中,依條件擷取、判斷、計算、重組資料。
Install#
$ sudo apt install gawkOperate#
語法#
awk options 'pattern {action}' file| 參數 | 說明 |
|---|---|
| options | awk 的選項參數 |
| pattern | 用來匹配輸入資料的模式 |
| action | 當模式匹配成功時要執行的動作 |
| file | 要處理的輸入檔案 |
options 参數说明:#
| 參數 | 說明 |
|---|---|
| -F | 指定輸入欄位的分隔符號 |
| -v | 在執行 awk 腳本前設定變數的值 |
| -f | 從指定的檔案中讀取 awk 腳本 |
| -V –version | 顯示 awk 的版本資訊 |
| -h –help | 顯示幫助資訊 |
示範#
印出整行(這裡 $0 是預設整行。)#
awk '{print $0}' filename.txt印出包含 “error” 的行#
awk '/error/ {print}' /var/log/syslog使用逗號作為分隔符,印出每行的第一欄#
awk -F, '{print $1}' data.csv印出每行的第一欄和第三欄#
awk '{print $1, $3}' file.txt在每行前印出變數 var 的值#
awk -v var="value" '{print var, $0}' file.txt程式區塊與控制流程#
| 區塊 | 說明 |
|---|---|
| BEGIN {} | 程式開始前執行 |
| 主體 {} | 對每行處理 |
| END {} | 處理完後執行 |
awk 'BEGIN {print "Start"} {print NR, $0} END {print "End"}' file.txt此外也支援如 if/else, for/while, 邏輯運算符等控制結構。
寫成腳本檔執行#
當指令變複雜,可以寫成 .awk 腳本:
#!/usr/bin/awk -f
# list.awk
BEGIN { print "Name Telephone Wage Hours" }
{ print $1, $2, $3, $4 }執行:
awk -f list.awk employee.txt常用內建變數與條件#
常見變數:NR(目前行號)、NF(目前欄位數)、FS(輸入分隔符)、OFS(輸出分隔符)。
例:只印欄位數 ≥ 3 的行的最後一欄:
awk 'NF >= 3 { print $NF }' file.txtReference#
Official docs: