- 论坛徽章:
- 2
|
本帖最后由 yinyuemi 于 2012-04-08 14:37 编辑
回复 13# mpstat
Thanks!
测试结果如下:
- 环境:cygwin
- CYGWIN_NT-5.1 version 1.7.11
- time awk -f jiejie455.awk testfile >/dev/null
- real 0m2.180s
- user 0m2.030s
- sys 0m0.124s
- time perl -lane '{push(@a,"@F") if($F[-1] eq "aaa");print shift @a," @F" if($F[-1] eq "bbb")}' testfile >/dev/null
- real 0m0.830s
- user 0m0.718s
- sys 0m0.061s
- 参考jason680的code略作修改,如下
- cat jason680_m.pl
- #!/bin/perl
- use strict;
- my @F;
- my @a;
- open(f,"@ARGV[0]") or die "$!";
- while(<f>){
- chomp;
- push @a, $_ if($_ eq "aaa");
- print shift @a," $_" if($_ eq "bbb");
- }
- close(f);
- time perl jason680_m.pl testfile >/dev/null
- real 0m0.245s
- user 0m0.124s
- sys 0m0.092s
- time sed -nr -f mpstat.sed testfile >/dev/null #sed的效率有点让人失望,不过不是code的问题,我觉得mpstat的code已经很犀利了,慢的原因应该是正则部分
- real 0m9.227s
- user 0m9.155s
- sys 0m0.046s
- time awk -f winway1988.awk testfile >/dev/null
- real 0m0.443s
- user 0m0.358s
- sys 0m0.031s
- cat ss.awk # 额的awk code,比perl还是慢,求效率更高的~
- /aaa/{if(t){i=t=j=0}a[i++]=$0}
- /bbb/{print $0,a[j++];t=1}
- time awk -f ss.awk testfile >/dev/null
- real 0m0.330s
- user 0m0.249s
复制代码 |
|