perl統計日誌文件ip及數量

1、先查看下日誌的格式:

"1.162.50.56, 19.97.154.15" - - [04/Mar/2012:10:15:33 +0800] "GET /book/12688.html HTTP/1.0" 200 48407 "http://www.baidu.com/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; GTB6.4; znwb6500; .NET CLR 1.1.4322; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbPTV2/5.9.1.14019)" "287000"

這裏的ip地址可能是1個或多個;

2、代碼

  1. #!/usr/bin/perl  
  2. my %totalip;  
  3. my $key;  
  4. my $ip1 = '';  
  5.  
  6. sub hashValueIp {  
  7.     $totalip{$b} <=> $totalip{$a};  
  8. }  
  9.  
  10. while(<>){  
  11.     chomp;  
  12.     ($ip1) = /^"(.*?)"/;  
  13.     my @ips = split(/, /,$ip1);  
  14.     foreach my $index (0..$#ips){  
  15.         $totalip{$ips[$index]}++;  
  16.        }  
  17.     }  
  18. print "ip address       count \n";  
  19. foreach $key (sort hashValueIp(keys %totalip)){  
  20.     print $key."        ".$totalip{$key}."\n";  

6行:構建子函數,使得輸出按照ip的次數進行排序;

12行:這裏的?是去除*匹配符的貪婪性,即可以獲取第一對""之間的ip地址;

15行:統計ip數

輸出:

 

  1. ip address      count   
  2. 18.44.95.134  6466  
  3. 19.7.154.16   5323  
  4. 19.7.154.15   4811  
  5. 19.53.48.2    574  
  6. 14.193.167.1   290  
  7. 17.0.0.1       172  
  8. 21.6.3.77      114 

 

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