- #!/usr/bin/perl -w
-
#script: anly.pl
-
#分析统计文件中给定模式出现的次数
-
#主要用来初步分析nginx的日志文件,当然其他的文件也可以
-
#来源:Lover的工具小屋
-
#author: Lover
-
use strict;
-
-
my $obj = shift || die "Usage: anly.pl xx.log '[^sS]top'\n no input file";
-
# 默认匹配ip地址
-
my $re = shift || '\d+\.\d+\.\d+\.\d+';
-
my %uniq;
-
my $total;
-
my @tmp;
-
-
open (OBJ,$obj) or die $!;
-
my @data = <OBJ>;
-
foreach (@data) {
-
if (/($re)/) {
-
push(@tmp,$1);
-
}
-
}
-
@tmp = grep { !$uniq{$_}++ } sort @tmp;
-
-
#开始格式化输出结果
-
print "$_\n" for @tmp;
-
print("----------------------------------------------\n");
-
printf("%-38s %s\n",'查询元素','出现次数');
-
-
#按照出现的次数顺序排列,如果要倒序的话将 $uniq{$a} <=> $uniq{$b} 替换为 $uniq{$b} <=> $uniq{$a}
-
foreach (sort { $uniq{$a} <=> $uniq{$b} } (keys %uniq)){
-
printf("%-38s %s\n",$_,$uniq{$_});
-
$total += $uniq{$_};
-
}
- printf("%-38s %s\n",'总计',$total);