標籤:os 資料 art for re c
#!/usr/bin/perl# name: logcalc.pl# calc the amount of access urluse strict;use warnings;use diagnostics;use File::Basename;my ($arg, $arg_only);my $FILE;my ($year, $month, $day, $mon);my ($time, $method, $url);my ($amount, $hour, $key, $value);my (%part, %hash);my @array;$arg = shift @ARGV;$arg_only = basename($arg);@array = split /_/, $arg_only;$array[1] =~ /^(\d{4})(\d{2})(\d{2})$/;# print $&;$year = $1;$month = $2;$day = $3;%hash = ( "01" => "Jan", "02" => "Feb", "03" => "Mar", "04" => "Apr", "05" => "May", "06" => "Jun", "07" => "Jul", "08" => "Aug", "09" => "Sep", "10" => "Oct", "11" => "Nov", "12" => "Dec",);$mon = $hash{$month};open $FILE, "<$arg" || die "can not open the log file\n$!";while (<$FILE>) { chomp; my(undef, undef, $time, undef, undef, $method, $url, undef) = split /\s+/;# print "$time, $method, $url\n"; if($time =~ m/$day\/$mon\/$year:(..)/){ $hour=$1; if($method=~/GET/&&$url=~/^\/p\//){ $amount++; $part{$hour}++; } }}printf("Total amount is %d\n", $amount);=podwhile(($key, $value) = each %part){ printf("The amount of %sh is %d\n", $key, $value);}=cutfor $key (sort keys %part){ printf("The amount of %sh is %d\n", $key, $part{$key});}