Ruby函数比grep更快

时间:2014-05-09 15:03:58

标签: ruby bash grep

我最近测试了一个小的Ruby脚本,当我决定将(zf)grep的速度与我的脚本进行比较时,在一个大的g-zipped文件中输出包含特定匹配模式的行。我可能过于简单化,但从我所知道的情况来看,我的脚本似乎比类似的grep函数快得多地运行。

我正在使用大约800 MB的g-zipped XML文件,我的典型grep函数如下所示:

zfgrep "expression-to-match" file_name.xml.gz

我正在寻找一个只在文件中出现一次的特定字符串值,这通常需要大约6-7分钟才能完成我的2010年中期MacBook Pro。我正在比较这个剧本:

require 'zlib'

expr, file = ARGV[0], ARGV[1]

Zlib::GzipReader.open(file) { |gz| 
    gz.each { |line| 
        puts line if line[expr] 
    } 
}

我使用类似的语法来运行脚本:

ruby script.rb "expression-to-match" file_name.xml.gz

Ruby脚本运行大约40-50秒。我对运行时优化没有很好的理解,所以我想知道为什么Ruby进程在我的机器上要快得多。显然,就其使用的选项而言,它并不像grep那么灵活,但对于我正在做的事情,我并不需要那种灵活性。

1 个答案:

答案 0 :(得分:0)

正如上面的评论中所讨论的,您的脚本没有进行正则表达式测试,而是进行简单的子字符串搜索。

您需要将脚本更改为类似的功能来测试类似功能:

expr, file = Regexp.new(ARGV[0]), ARGV[1]