首页 > 代码库 > 无意中测试了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的性能差异