linux perl 运行时间,【linux】grep 和【perl】 脚本实现的grep功能的运行时间差异

参考在网上找到的代码,没想到相差那么大,目前有个项目要对50GB~70GB的代码,260个关键字做扫描,急需一个比较快速的方案。

[[email protected] stat]$ wc -l 1

234033 1

[[email protected] stat]$ perl 1.pl

cost 1 seconds

zjtel : 32606

[[email protected] stat]$ perl 2.pl

cost 111 seconds

zjtel : 32606

1.pl

#!/usr/bin/perl

my $time=time();

open(file,"1");

while(;)

{

chomp;

if(m/:zjtel:/)

{

$zjtel++;

}

}

close(file);

$time=time()-$time;

print "cost $time seconds\n";

print "zjtel : $zjtel\n"; 2.pl

#!/usr/bin/perl

$time=time();

$count=`grep zjtel 1 | wc -l `;

$time=time()-$time;

print "cost $time seconds\n";

print "zjtel : $count\n"

我的等待测试代码:

pattern-match:

use strict;

use File::Basename;

//在一个目录的文件文件中查找包含关键字的 ::

my ($dir,$keywords)= @ARGV;

opendir(DIRHANDLE,$dir) or die "Can‘t open $dir:$!";

my @filenames=sort readdir(DIRHANDLE);

close(DIRHANDLE);

open KEY,"

my @keywords=;

close KEY;

my $num_key=scalar @keywords;

my @match_lines;

my $time=time();

foreach my $file(@filenames){

open FILE,"

$n=1;

while my $line(){

chomp $line;

foreach my $key(@keywords){

if($line=~m/$key/){

$context="$file:$n:$line\n";

push @match_lines,$context;

}

}

}

close(file);

}

open RS,">result_file_pattern";

foreach(@match_lines){

print RS $_;

}

close RS;

$time=time()-$time;

print "Patter-match ($num_key keywords) end:$time seconds\n";

//如果直接将$context print到RS句柄和现在这种方式是否有区别? grep:

use strict;

use File::Basename;

//在一个目录的文件文件中查找包含关键字的 ::

my ($dir,$keywords)= @ARGV;

opendir(DIRHANDLE,$dir) or die "Can‘t open $dir:$!";

my @filenames=sort readdir(DIRHANDLE);

close(DIRHANDLE);

open KEY,"

my @keywords=;

close KEY;

my $num_key=scalar @keywords;

my @match_lines;

my $time1=time();

foreach my $file(@filenames){

foreach $key(@keywords){

chomp $key;

my @sub_match_lines=`grep $key $file`;

push @match_lines,@sub_match_lines;

}

}

open RS,">result_file_grep";

foreach(@match_lines){

print RS $_;

}

close RS;

my $time2=time();

print "Grep ($num_key keywords) end:",$time2-$time1,"\n";

//如果直接将$context print到RS句柄和现在这种方式是否有区别?

原文:http://my.oschina.net/u/347414/blog/352435

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值