- 论坛徽章:
- 0
|
20可用积分
不好意思,学perl的时间不多
所有代码:
#! /usr/bin/perl -w
use PerlIO::gzip;
#use strict;
#use diagnostics;
my $datcounttime=`/bin/sh datcounttime.sh`;
chomp($datcounttime);
my %TmpHash;
my $POPDir="/home/temp/pop1,/home/temp/pop2,/home/temp/pop3,/home/temp/pop4";
my @logDirNames = split /,/, $POPDir;
my $abc="abc=101,abc=103,abc=105,abc=107";
my @abcNames=split /,/, $abc;
my $counttime="counttime=0,counttime=1,counttime>1";
my @counttimeNames= split /,/, $counttime;
my $hourly="00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23";
my @hourlyNames = split /,/, $hourly;
#//以上面三个数组元素的组合字符串作为创建hash 的key, 初始值为0
foreach my $hourType (@hourlyNames) {
foreach my $counttimeType (@counttimeNames) {
foreach my $abcType (@abcNames) {
if($counttimeType eq "counttime>1"{
$counttimeType = "counttime=(?![01])";
$TmpHash{"$datcounttimehourType.*$abcType.*$counttimeType"} = 0;
}
else {
$TmpHash{"$datcounttimehourType.*$abcType.*$counttimeType"} = 0;
}
}
}
}
foreach my $logDirName (@logDirNames) {
if ( ! -d $logDirName ){
next;
}
print "$logDirName\n";
my @logFileNames = <$logDirName/access*>;
foreach my $logFileName (@logFileNames) {
open (logFile, "<:gzip", "$logFileName" or die "Can't open $logFileName: $!";
while(<logFile> {
如果当前行与hash中的某一个key(字符串)相匹配,则这个key对应的value加1
}
close logFile;
}
}
while (my ($key, $value) = each (%TmpHash)) {
print "$key => $value\n";
}
如果去掉中间的foreach就是下面这样的输出:
[17\/Oct\/2009:16.*abc=105.*counttime=1.* => 0
[17\/Oct\/2009:02.*abc=103.*counttime=(?![01]).* => 0
[17\/Oct\/2009:08.*abc=107.*counttime=1.* => 0
[17\/Oct\/2009:04.*abc=105.*counttime=1.* => 0
[17\/Oct\/2009:12.*abc=107.*counttime=0.* => 0
[17\/Oct\/2009:01.*abc=103.*counttime=(?![01]).* => 0
[17\/Oct\/2009:07.*abc=105.*counttime=(?![01]).* => 0
[17\/Oct\/2009:11.*abc=107.*counttime=0.* => 0
[17\/Oct\/2009:17.*abc=103.*counttime=(?![01]).* => 0
[17\/Oct\/2009:14.*abc=105.*counttime=0.* => 0
[17\/Oct\/2009:14.*abc=103.*counttime=1.* => 0
[17\/Oct\/2009:15.*abc=103.*counttime=(?![01]).* => 0
[17\/Oct\/2009:00.*abc=101.*counttime=(?![01]).* => 0
[ 本帖最后由 HAHAPrince 于 2009-10-20 11:47 编辑 ] |
最佳答案
查看完整内容
#! /usr/bin/perl -wuse PerlIO::gzip;#use strict;#use diagnostics;my $datcounttime=`/bin/sh datcounttime.sh`;chomp($datcounttime);my %TmpHash;my $POPDir="/home/temp/pop1,/home/temp/pop2,/home/temp/pop3,/home/temp/pop4";my @logDirNames = split /,/, $POPDir;my $abc="abc=101,abc=103,abc=105,abc=107";my @abcNames=split /,/, $abc;my $counttime="counttime=0,counttime=1,counttime>1";my @counttimeNames= sp ...
|