tilg 发表于 2015-12-28 13:40:12

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 "|      Pojectof   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;
#把特殊符号去掉
$Date=~s/\[//;
#切割日期
@home_date=split(/:/,$Date);
#home_date 就是准确的年月日
#time就是小时/分钟/秒
$time="$home_date:$home_date:$home_date";
#获取访问动作
$Option=$oldlist;
#对特殊符号进行替换
$Option=~s/"//;
#获取访问协议
$Agree=$oldlist;
#对特殊符号进行替换
$Agree=~s/"//;
#获取客户端访问类型
$client=$oldlist;
#对特殊符号进行全局替换
$client=~s/"//g;
push(@check,$oldlist);
push(@check,$home_date);
push(@check,$time);
push(@check,$Option);
push(@check,$oldlist);
push(@check,$Agree);
push(@check,$oldlist);
push(@check,$client);
open OUT,'>>','./out.text';
print OUT "IP地址:$check 日期:$check 时间:$check 动作:$check 路径:$check 协议:$check 响应:$check 客户端:$check\n";
}
close OUT;
close IN;
$pm->finish;
}
}
system "rm -rf $opt_n*";

  
页: [1]
查看完整版本: Perl多进程处理Web日志