格式:
awk 'BEGIN{actions} \
pattern1 {actions} \
......
patternN {actions} \
END{actions} ' inputfile
awk以檔案的一行爲處理單位,提出了欄位的概念,方便對行的欄位進行更有效率的處理。行匹配語句 awk ‘’ 只能用單引號。
注意:
分隔符預設爲空格(不是製表符),$0代表當前整條記錄。
模式匹配時模式需用"//"包裹。
#以一個或者:或空格爲分隔符,對檔案/etc/test01按行處理,對於檔案中包含有apple子串的行,輸出這些行的第一個欄位
#這裏的檔案也可通過管道傳送過來
awk -F"[ :]+" '/apple/{print $0}' /etc/test01
#以:作爲分隔符,以#作爲輸出分隔符,對第二行的數據的第一和第三個欄位進行輸出
awk 'BEGIN{FS=":";OFS="#"} NR==2{print $1,$3}'
#將begin體中的字元傳入並切割後列印
awk 'BEGIN{info="this is a test";split(info,tA," ");
print length(tA);
for(k=1;k<=4;k++){print k,tA[k];}}'
經典範例:
1.統計每一行出現的次數
#假設test03爲每一行都爲一個單詞的檔案,新建一個數組a,以每一行單詞作爲key進行個數統計
awk '{a[$1]++}END{for(i in a){print a[i],i}}' test03
2.統計tcp連線狀態資訊(與上一個例子類似)
netstat -tna | awk '/^tcp/{arr[$6]++}END{for(state in arr){print arr[state] ": " state}}'