用cat統計apache日誌ipshell
現有一段apache的日誌,須要從日誌中提取出訪問量最大的IP。使用shell實現。 apache
日誌以下(只是舉例,故數據量較小): 日誌
$ more aa.txt ip
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 awk
192.168.1.100 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 統計
192.168.1.100 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 數據
192.168.1.100 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 sort
1.要提取訪問量最大的IP,須要先從日誌中把IP段提取出來。 gif
$ cat aa.txt |awk -F " " '{print $1}'
127.0.0.1
192.168.1.100
192.168.1.100
192.168.1.100
(PS,此處也能夠用cut命令實現。
$ cut -d " " -f 1 aa.txt
127.0.0.1
192.168.1.100
192.168.1.100
192.168.1.100)
2.對IP進行統計,看各IP出現過多少次
$ cat aa.txt |awk -F " " '{print $1}' |uniq -c
1 127.0.0.1
3 192.168.1.100
(PS:wc -l也能夠對行數統計,但統計的是總體的,全部行數。不會分類統計)
3.按IP出現次數從大到小排列
$ cat aa.txt |awk -F " " '{print $1}' |uniq -c |sort -r
3 192.168.1.100
1 127.0.0.1
4.再次提取出IP段
$ cat aa.txt |awk -F " " '{print $1}' |uniq -c |sort -r |awk '{print $2}'
192.168.1.100
127.0.0.1
5.選擇第一行
$ cat aa.txt |awk -F " " '{print $1}' |uniq -c |sort -r |awk '{print $2}' |head -1
192.168.1.100