最近我测试了一个小的Ruby脚本,以便在一个大的g-zf文件中输出包含特定匹配模式的行,这时我决定将(zf)grep的速度与我的脚本进行比较。我可能过于简单化了一些东西,但据我所知,我的脚本似乎比类似的grep函数运行得快得多。
我正在处理大约800MB的g压缩XML文件,我的典型grep函数如下所示:
zfgrep "expression-to-match" file_name.xml.gz我正在寻找一个特定的字符串值,它只在文件中出现一次,这通常需要6-7分钟才能在我的2010年中期MacBook专业版上完成。我正在与这个脚本进行比较:
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.gzRuby脚本大约在40-50秒内运行。我对运行时优化不是很了解,所以我想知道为什么Ruby进程在我的机器上要快得多。显然,在可供使用的选项方面,它远不如grep灵活,但就我所做的工作而言,我并不真正需要这种灵活性。
发布于 2014-05-10 06:15:47
正如在上面的注释中所讨论的,您的脚本不是执行正则表达式测试,而是执行简单的子字符串搜索。
为了测试类似的功能,您需要将脚本更改为类似的代码:
expr, file = Regexp.new(ARGV[0]), ARGV[1]https://stackoverflow.com/questions/23567945
复制相似问题