AWK

AWK 是UNIX 系統上專門用來處理資料分析的程式語言, AWK 大量引用 C Language 的語法,而且也支援正規表示式(Regular Expression)。

AWK 的寫法為 '條件類型{動作}' filename

NoticeAWK 預設的分隔符號是 空白 or Tab

範例資料(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
Categories: Unix