|
不多说了,这个脚本是我刚学得时候写的。。
#!/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*";
|
|
|