不多说了,这个脚本是我刚学得时候写的。。
#!/usr/bin/perl use 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(<IN>){ @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*";