awk命令詳解及應用技巧


      awk是Linux中三劍客之一,awk在對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,可以根據按行按列的操作金屬數據分析。相比於sed,優勢在於取行取列最快,並且應用數組有計算的功能。sed是換數據最快最好用的。

一、  AWK的基礎用法

1 awk基本使用格式:

awk [參數] ‘模式[動作]’ 文件名

其中:

參數:-F “ ” 指定分列符,默認是以空格作為分列符的

模式:內容的查找范圍→過濾的文件內容(按行取數)

NR 記錄符,取行,不是真正的行數,是awk處理過的行數(如NR==2)

/ / 取內容(如/^b/)

動作:{}里面可以有多個動作,語句間用;分隔

    awk –F “[ :]+” ‘NR==2{print $13,14}’取多列用,分隔

    $ 表示取列的意思

    $NR 表示取最后一列

    $0 表示取出所有列

  

2 awk執行過程

BEGIN

1)awk讀入第一行內容

2)判斷是否符合模式中的條件

a,如果匹配則執行對應的動作
b,如果不匹配條件,繼續讀取下一行

3)繼續讀取下一行 
4)重復過程1-3,直到讀取到最后一行

END

注:BEGIN和END只執行一次,中間部分有幾行執行幾次

awk完整使用格式:

 

(1)BEGIN模塊:在awk讀取文件之前執行一次,一般用來定義內置變量,也可以輸出表頭

(2)END 模塊:在awk讀取玩所有的文件的時候,在執行END模塊,一般用來輸出一個結果(累加、數組結果),也可以是和BEGIN模塊類似的結尾標識符

(3)關於行:

RS:(record separator)讀入換行符,行與行之間怎么分隔,默認是\n

ORS:(output record separator)輸出換行符,默認也是\n

注:awk中可以通過BEGIN模塊來重新定義修改變量值,如BEGIN{RS=“/”}

awk對每一行的記錄號都有一個內置變量NR來保存,沒處理一次,NR自動加一 

(4)關於列:

FS:(field separator)輸入(列)分隔符。默認空格做分隔符

命令:

-F參數:-F “

BEGIN模塊:‘BEGIN{FS=“”}

注:默認awk中是以空格作為分隔符的,但是默認的分列符是將內容前后空格都去掉以后,再算空格的,不同於指定空格作為分隔符。

二、awk模式與動作

1 模式(過濾條件)分為:

①正則表達式作為模式(符號、字符)

②比較表達式作為模式(大小)

③范圍模式

④特殊模式BEGIN和END

(1)正則表達式作為模式:(/^r/ 以…開頭)

awk支持所有正則,默認不支持{},加參數—posix

正則表達式的運用,默認是在行內查找匹配到的字符串,若有匹

配則執行動作;但有時候需要固定的列來匹配指定的內容(加~)

~正則匹配操作符,用於對記錄或區域的表達式進行匹配

awk正則中

^或$是匹配一個字符串的開頭或結尾

sed和grep

^或$是匹配的開頭或結尾

  

 

(2)比較表達式作為模塊:(比較大小,相等)

awk –F ‘$5==”root”’ test

(3)范圍模式

(4)BEGIN模式和END模式

BEGIN模塊:

②   變量賦值:BEGIN{a=1;b=2;print a,b,a+b}

③   修改內置變量:BEGIN{FS=”[ :]+”}

④   輸出表頭:BEGIN{print “username”,”UID”}

⑤   計算:BEGIN{print 10/3}

END模塊:

最后awk讀完所有文件時,再執行END模塊,一般用來輸出一個結果(累加,數組結果),也可以是和BEGIN模塊類似的結尾標識。

 應用:

 

 

 

 

 

 

 

 

 

 

 

▲企業應用:

?按單詞出現頻率降序排序(計算文件中每個單詞的重復數量)

需掌握的關於統計的幾個命令

uniq 去重 (參數-C 去重的同時計數)

sort 排序,默認是按26個字母排序,第一列

    -n 按數字進行排序

    -r 逆轉排序

    -k 指定按哪一列排序

 

 

以上,可以完成排序,去重任務,但是不能計算,故下面引入數組。

AWK數組:

 

 

 

for (i in h) print i,h[i]

其中,

i 是變量,i里存的書房間號,特點:不會重復

in 變量從哪里取值

h 數組名

應用:awk最重要的一個功能是計數,而數組是在awk里最大的作用是去重

 

(1)去重並計數(統計重復數)

 

(2) 去重並計算

 

數組的房間號的一個特點:不會重復。故經常將要去重的項當成房間號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM