awk命令使用

2020-08-10 08:30:41

格式:

 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}}'