Perl多进程处理Web日志

不多说了,这个脚本是我刚学得时候写的。。

#!/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*";
原文地址:https://www.cnblogs.com/xiaoCon/p/2934319.html