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}'
-
LM-SHC-16507744:Desktop yanwxu$ cat testd
-
123#ruby#3#abc
-
456#rechel#25#def
-
789#wang#30#ghi
-
LM-SHC-16507744:Desktop yanwxu$ awk -F# '{print $1,$2}' testd
-
123 ruby
-
456 rechel
-
789 wang
-
LM-SHC-16507744:Desktop yanwxu$ awk -v FS='#' '{print $1,$2}' testd
-
123 ruby
-
456 rechel
-
789 wang
-
LM-SHC-16507744:Desktop yanwxu$ awk -v FS='#' OFS='+++++' '{print $1,$2}' testd
-
awk: syntax error at source line 1
-
context is
-
>>> OFS=++++ <<<
-
awk: bailing out at source line 1
-
LM-SHC-16507744:Desktop yanwxu$ awk -v FS='#' -v OFS='+++++' '{print $1,$2}' testd
-
123+++++ruby
-
456+++++rechel
-
789+++++wang
-
LM-SHC-16507744:Desktop yanwxu$ awk -F# '{print $1,$2}' testd
-
123 ruby
-
456 rechel
-
789 wang
-
LM-SHC-16507744:Desktop yanwxu$ awk -F# '{print $1 $2}' testd
-
123ruby
-
456rechel
-
789wang