首页 > 代码库 > 无意中测试了grep,sed,awk的性能差异

无意中测试了grep,sed,awk的性能差异

最近从数据库中导出了230万条文本文件格式的数据记录。开了台freebsd虚拟机。ram 256Mb,cpu 1 core。其实就是测试在相同的硬件环境下,grep,sed,awk(nawk)三个工具的搜索文件的效率。

搜索结果:

[root@ServerA/var]# time grep 18921373250 vo.txt   //grep第一次搜索

/20101220/10000_18921373250_8_11623_20101220101118.pcm

/20110513/10000_18921373250_11_11610_20110513130641.pcm

/20120203/10000_18921373250_3_11617_20120203142510.pcm

/20110419/10000_18921373250_10_11611_20110419132814.pcm

real    0m6.230s

user    0m1.431s

sys     0m4.558s

#iostat -2

       tty             da0              da1              da2             cpu

        tin tout  KB/t tps  MB/s  KB/t tps  MB/s   KB/t tps MB/s  us ni sy in id

        0   25 56.02   4  0.21 16.62   0  0.00 15.94   0  0.00    29  0 16  2 53

        0  127  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00     26  0 74 1  0

        0   83  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00     31  0 69 0  0

[root@ServerA/var]# time grep 18921373250 vo.txt  //grep第二次搜索

/20101220/10000_18921373250_8_11623_20101220101118.pcm

/20110513/10000_18921373250_11_11610_20110513130641.pcm

/20120203/10000_18921373250_3_11617_20120203142510.pcm

/20110419/10000_18921373250_10_11611_20110419132814.pcm

real    0m9.878s

user    0m1.794s

sys     0m6.616s

 [root@ServerA /var]# time sed -n‘/18921373250/p‘ vo.txt    //sed第一次搜索

/20101220/10000_18921373250_8_11623_20101220101118.pcm

/20110513/10000_18921373250_11_11610_20110513130641.pcm

/20120203/10000_18921373250_3_11617_20120203142510.pcm

/20110419/10000_18921373250_10_11611_20110419132814.pcm

real    0m18.100s

user    0m11.419s

sys     0m5.474s

#iostat -2

     tty             da0              da1              da2      cpu

 tin tout  KB/t tps  MB/s  KB/t tps  MB/s   KB/t tps MB/s  us ni sy in id

   0   33  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  53  0 25  120

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  69  0 31  0  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  70  0 30 0  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  63  0 36 0  0

   0   57  0.00   0 0.00   0.00   0  0.00   0.00  0  0.00  67  030  3 0

   0   33  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  70  0 29 1  0

   0   83 13.00   1  0.01  0.00   0  0.00  0.00   0  0.00 70  0 29  1  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  75  0 25 0  0

   0   87  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  32  0 17  150

[root@ServerA/var]# time sed -n ‘/18921373250/p‘ vo.txt   //sed第二次搜索

/20101220/10000_18921373250_8_11623_20101220101118.pcm

/20110513/10000_18921373250_11_11610_20110513130641.pcm

/20120203/10000_18921373250_3_11617_20120203142510.pcm

/20110419/10000_18921373250_10_11611_20110419132814.pcm

real    0m20.512s

user    0m12.938s

sys     0m6.192s

[root@ServerA/var]# time awk ‘/18921373250/{print}‘ vo.txt  //awk第一次搜索

/20101220/10000_18921373250_8_11623_20101220101118.pcm

/20110513/10000_18921373250_11_11610_20110513130641.pcm

/20120203/10000_18921373250_3_11617_20120203142510.pcm

/20110419/10000_18921373250_10_11611_20110419132814.pcm

real    0m45.853s

user    0m33.854s

sys     0m6.507s

#iosstat -2

  tty             da0              da1              da2       cpu

tin  tout KB/t tps  MB/s   KB/t tps MB/s   KB/t tps  MB/s us ni sy in id

   0   33 16.00   3  0.04  0.00   0  0.00  0.00   0 0.00  85  0 11 4  0

   0  102  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  85  0 15 0  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  84  0 15 1  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  83  0 16 1  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  84  0 15 1  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  87  0 13 0  0

   0   34 16.00   1  0.01  0.00   0  0.00  0.00   0  0.00 87  0 12  1  0

   0   24  0.00   0  0.00   0.00  0  0.00   0.00  0  0.00 75  017  7 0

   0   29  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  82  0 18 0  0

   0   59  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  90  0 10 0  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  84  0 15 1  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  84  0 15 1  0

   0   63  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  77  0 18 4  0

   0   34  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  83  0 16 1  0

   0   84  0.00   0 0.00   0.00   0 0.00   0.00   0 0.00  21  0 6  0 73

测试结果说明:

1、同一个工具,第一次执行和第二次执行,第二次时间明显比第一次长,不知为何。

2、grep搜索的速度最快。sed次之,awk最差。所以以后就知道该用哪个工具了。

3、三个工具消耗cpu的方式不同。grep消耗sy比较多,而sed和awk消耗us比较多。很奇怪。不知为何。

这里只是抛砖引玉,希望大侠能解释一下。

无意中测试了grep,sed,awk的性能差异