不多说了,这个脚本是我刚学得时候写的。。
#!/usr/bin/perluse Getopt::Std;use vars qw( $opt_t $opt_l $opt_n $opt_p);use Parallel::ForkManager;print "-----------------------------------------\n";print "| |\n";print "| Poject of Log-grep |\n";print "| |\n";print "| help: log-grep.pl -t 线程 |\n";print "| -l 行数 -n 名称 -p 路径 |\n";print "-----------------------------------------\n";getopts('t:l:n:p:');#把文件切割N份同步执行。system "split -l $opt_l $opt_p $opt_n";my $pm=new Parallel::ForkManager($opt_t);my $dir=".";my $file;my @dir;opendir (DIR,$dir) or die "Can't open the directory!";$i=0;@dir=readdir DIR;foreach $file (@dir){ if($file=~/$opt_n/){ $i++; $pm->start and next; print "创建第$i个线程\n"; open IN,'<',$file; while(){ @oldlist=split(/\s/); $Date=$oldlist[3]; #把特殊符号去掉 $Date=~s/\[//; #切割日期 @home_date=split(/:/,$Date); #home_date[0] 就是准确的年月日 #time就是小时/分钟/秒 $time="$home_date[1]:$home_date[2]:$home_date[3]"; #获取访问动作 $Option=$oldlist[5]; #对特殊符号进行替换 $Option=~s/"//; #获取访问协议 $Agree=$oldlist[7]; #对特殊符号进行替换 $Agree=~s/"//; #获取客户端访问类型 $client=$oldlist[11]; #对特殊符号进行全局替换 $client=~s/"//g; push(@check,$oldlist[0]); push(@check,$home_date[0]); push(@check,$time); push(@check,$Option); push(@check,$oldlist[6]); push(@check,$Agree); push(@check,$oldlist[8]); push(@check,$client); open OUT,'>>','./out.text'; print OUT "IP地址:$check[0] 日期:$check[1] 时间:$check[2] 动作:$check[3] 路径:$check[4] 协议:$check[5] 响应:$check[6] 客户端:$check[7]\n"; } close OUT; close IN; $pm->finish; }}system "rm -rf $opt_n*";