awk統計排序,awk 的分隔符

 access_log 是一個日誌文件,現在對裏面的IP地址進行統計,並且按數量進行降序排序。

日誌樣式如:

211.143.50.68 - - [13/Oct/2014:17:05:40 +0800] "POST /mobile/user/login.
216.58.115.41 - - [13/Oct/2014:17:05:40 +0800] "POST /mobile/user/
119.251.70.91 - - [13/Oct/2014:17:05:40 +0800] "POST /mobile/user/
223.98.200.171 - - [13/Oct/2014:17:05:40 +0800] "POST /mobile/
223.98.200.171 - - [13/Oct/2014:17:05:40 +0800] "POST /GameCallBack

 

命令:awk  '{a[$1]++} END{for(i in a){print i,a[i] | "sort -r -n -k 2"}}' access_log

統計結果爲:ip 數量,如:

42.62.86.204 222096
106.3.40.36 104001
120.42.197.250 98855
123.84.153.73 72438
42.62.29.140 55620
123.84.163.107 54370

命令說明:

a[$1]++ :默認是以空格爲分隔符的,ip地址是第一個字段,所以a[$1]++就是統計每個ip出現的數量,

END:表示爲腳本運行完之後要執行的語句,即之後的打印排序

sort -r -n -k:是排序 -r:是倒序; -n:是以數字的形式排序,默認是以字符的形式排序;-k是以那個字段進行排序,因爲print i a[i],所以統計的數量是第二個字段,所以此處是2.

 

awk 的分隔符

awk 分隔符的使用:

1.awk -F分隔符

2.是用分隔符變量 awk -v FS='分隔符'

3.輸出分隔符變量 awk -v OFS='分隔符'

4.輸出變量用','分割後將割開顯示  awk '{print $1,$2}'

5.輸出變量用' '分割後將連接顯示 awk '{print $1 $2}'

  1. LM-SHC-16507744:Desktop yanwxu$ cat testd
  2. 123#ruby#3#abc
  3. 456#rechel#25#def
  4. 789#wang#30#ghi
  5. LM-SHC-16507744:Desktop yanwxu$ awk -F# '{print $1,$2}' testd
  6. 123 ruby
  7. 456 rechel
  8. 789 wang
  9. LM-SHC-16507744:Desktop yanwxu$ awk -v FS='#' '{print $1,$2}' testd
  10. 123 ruby
  11. 456 rechel
  12. 789 wang
  13. LM-SHC-16507744:Desktop yanwxu$ awk -v FS='#' OFS='+++++' '{print $1,$2}' testd
  14. awk: syntax error at source line 1
  15. context is
  16. >>> OFS=++++ <<<
  17. awk: bailing out at source line 1
  18. LM-SHC-16507744:Desktop yanwxu$ awk -v FS='#' -v OFS='+++++' '{print $1,$2}' testd
  19. 123+++++ruby
  20. 456+++++rechel
  21. 789+++++wang
  22. LM-SHC-16507744:Desktop yanwxu$ awk -F# '{print $1,$2}' testd
  23. 123 ruby
  24. 456 rechel
  25. 789 wang
  26. LM-SHC-16507744:Desktop yanwxu$ awk -F# '{print $1 $2}' testd
  27. 123ruby
  28. 456rechel
  29. 789wang

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章