现在的位置: 首页 > 综合 > 正文

Awk、Grep/Sed/Awk组合及Perl进行文本处理性能比较

2013年09月16日 ⁄ 综合 ⁄ 共 977字 ⁄ 字号 评论关闭




1.引言

从原始数据文件中获取各种类型的数据,将其去除报头后输出到根据数据类型命名的不同文件中。这一分拣和格式化数据的任务是很多数据分析处理的基本部分。实现这一任务可以选择多种可能的方式:用Awkgrep/sed/awk组合或者Perl来实现。




为了比较这三种实现方式的性能,我们选择了同样的数据进行测试,分别用三种方式编程,实现同样的功能,并且比较其运行时间性能。

我们使用的各种工具及操作系统版本如下:
     grep (GNU grep) 2.5.1
     sed  GNU sed version 4.1.2
     awk  GNU Awk 3.1.3
     Perl This is perl, v5.8.5 built for i386-linux-thread-multi
     Linux version 2.6.9-42.ELsmp (bhcompile@hs20-bc1-1.build.redhat.com) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-2)) #1 SMP Wed Jul 12 23:27:17 EDT 2006

2.算法简介

    三种方式中使用AwkPerl编程是对所有文件进行一次扫描,grep/sed/awk是对文件进行多次扫描。

Awk方式使用其自带的字段切分功能,并且使用其系统函数gsub实现去报头功能。

grep/sed/awk方式用grepsedawk完成其擅长的任务,grep进行字符串搜索、sed进行文本替换,awk进行字段分割与输出。

Perl方式中,主要是使用split函数进行两此切割,一次对字段进行切割(TAB分割),一次对报头和数据进行切割,根据dt报头字段将相应数据输出到不同文件中。

3. 运行结果

时间

Awk

grep/sed/Awk

Perl

运行结果

start...t=(16:37:19)

END.t=(19:01:53)

start...t=(21:13:56)

END.t=(22:01:47)

start...t=(11:34:01)

END.t=(12:21:50)

时间

144m34s

47m51s

47m49s

4. 结论

对于对文本进行搜索,字段替换及切分字段后进行格式化输出的三种实现方式中:用gred/sed/awk组合与perl程序的运行时间几乎相同,而纯粹用AWK写的程序运行时间则大约是以上两种方式写的程序的3

 

抱歉!评论已关闭.