AWK
AWK 是UNIX 系統上專門用來處理資料分析的程式語言, AWK
大量引用 C Language 的語法,而且也支援正規表示式(Regular Expression)。
AWK 的寫法為 '條件類型{動作}' filename
Notice:
AWK
預設的分隔符號是空白
orTab
。
範例資料(Data)
Johnson 100
Johnson 60
Yolanda 80
Shanny 70
Jenny 60
基本用法
# 顯示 Data 中的第一欄(姓名)
# AWK 會自動將各欄位儲存到 $1~$N 的變數中,$0 代表整行輸出
awk '{print $1}' Data
# AWK 也支援 STDIN
cat Data | awk '{print $1}'
# 數字加總
cat Data | awk '{count+= $2} END {print count}'
# 輸出時中間加入其他固定的字串
awk '{print $1 "->" $2}' Data
# 利用 -F 參數變更分隔符號
awk -F '->' '{print $1}' Data
# 使用判斷式找出數字介於 70~80 之間的資料
awk '{if($2 <= 80 && $2 >= 70) print $1 "\t" $2}' Data
# If Else 使用
awk '{if($2 >= 80) {print $1 "\tGood"} else {print $1 "\tSucks"}}' Data
# If 也可以簡化只寫判斷式
awk '$1 == "Johnson"{count+= $2} END {print count}' Data
# 找出姓名欄位中的所有不重複的名字(Unique Values)
awk '{name[$1]} END {for (i in name) print i}' Data
# 加總每個人的數字
awk '{name[$1]+=$2} END {for (i in name) print i " = " name[i]}' Data
# 輸出每筆資料後並加總
# 程式分格可以使用 ; 分開
awk '{total+=$2; print $0} END {print "Total\t" total}' Data
內建變數
AWK
裡有提供一些內建變數讓資料處理上更為方便。
變數名稱 | 功能 |
---|---|
NF | 每一行($0)的欄位數 |
NR | 目前執行到第幾行資料 |
FS | 目前的分格字元 |
# 透過 NR 及 NF 顯示資訊
awk '{print $0 "\t lines: " NR "\t columns: " NF}' Data