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

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

搜索结果:

[[email protected]/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

[[email protected]/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

[[email protected] /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

[[email protected]/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

[[email protected]/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比较多。很奇怪。不知为何。

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

时间: 2024-08-04 18:09:42

无意中测试了grep,sed,awk的性能差异的相关文章

grep,sed,awk与简单正则表达式应用

grep,sed,awk与简单正则表达式应用 这里使用的测试文件是linux /etc/passwd文件,最好是复制一份进行练习,方式对文件内容造成损坏.感觉还是要多练习才能很好的使用,习题这里就不贴了,网上一找一大把. grep:   -o 用作计算出现多少次字段  -c 打印符合要求的行数  -n 在输出符合要求的行的同时也打印行号  -v 打印不符合要求的行  -A 后跟一个数字 ps -A2表示打印符合要求的行及下面两行  -B 后跟一个数字 ps -B2表示打印符合要求的行及上面两行 

LINUX 下 find grep sed awk 的常见基本用法特点

LINUX 下 find grep sed awk 的常见基本用法特点 只为让自己具有更高的水准,这就开始了长达6个月的小白进阶路! 这几天学习linux基础命令有点犯蒙,尤其是对文件查找这块.所有我想把一些我觉得常用的实用的参数项总结下来,大神勿喷哈... 不到之处请大家指教,小女子在此谢过了. 一.find:命令用于查找文件系统中指定的文件,其命令格式为: 1.find pathname -options [ -print  -exec  -ok ... ] (1)find 命令的参数: p

Linux三剑客grep/sed/awk

grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color=auto 或者 --color:表示对匹配到的文本着色显示 -i:在搜索的时候忽略大小写 -n:显示结果所在行号 -c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 -v:输出不带关键字的行(反向查询,反

[CentOS 7系列]grep/sed/awk实战

最近准备和CoreSite - Any2 California接入商建立网络BGP邻居关系.从peeringdb (https://www.peeringdb.com/ix/142)上找到了所有接入商的信息,但是转移信息到本地不是很方便,需要进行多次文本调整,耗时较长.作为萌新,立马就想到近期学习的grep/sed/awk工具.于是就尝试处理数据. 1.下载页面内容 curl https://www.peeringdb.com/ix/142 > peering 将页面内容存入peering文件

十七. 正则以及grep ,sed,awk的简单应用

一.正则表达式:/ / grep,sed,awk 都能解释正则表达式 正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法.^ 以什么开头 grep '^root' /etc/passwd$ 以什么结尾 如能登入系统的所有用 grep 'bash$'/etc/passwd. 任意一个字符 grep '^b.n' /etc/passwd 过滤取到bin的.* 所有字符* 代表前面的字符有0个或者无穷个 grep 'b*' /+ 必须用egrep 或 egrep -E 'ab+'表示前面的字符

六、三剑客grep/sed/awk

6.1.正则表达式  正则表达式: 是一类字符所书写出的模式(pattern):元字符:不表示字符本身的意义,用于额外功能性的描述.  1) 基本正则表达式: BRE元字符: .: 匹配任意单个字符 [char]: 匹配指定范围内的任意单个字符 [^char]:匹配指定范围外的任意单个字符 字符集合: [:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:] 匹配次数( 贪婪模式) : *: 匹配其前面

find grep sed awk 详解

find :查找文件系统中指定的文件.可以按文件名(-name)  权限(-perm) 归属人 查找. find   要查找文件的路径   表达式 *通配符  可以添加在文件名的任意位置 常用的例子(具体可参照 find --help): find . -name 1.txt             在当前目录以及子目录下查找文件 1.txt find /tmp -name 1.txt       在/tmp目录以及子目录下查找文件 1.txt find /bin/ -perm 4755 | x

[shell]grep sed awk 练习题

下面是简单学习之后做得练习题,如果有不对的,请交流啊. Grep 练习 文件名grepfile Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500 Igor Chevsky:385-375-8395:3567 Populus Place, Caldw

shell脚本知识(三) 正则表达式 grep sed awk

1.正则表达式 匹配给定文本中的所有单词:( ?[a-zA-Z]+ ?) ?用于匹配单词前后可能出现的空格. 匹配IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}   括号分割的4个整数. 2.grep "mach_text"  file1 file2 file3-. 递归搜索文件: grep "text" ./ -Rn 3.cut  将文本按列进切分.可以指定分割每列的定界符.在cut术语中,每列一个字段. c