我有一个大文本文件,我想用 ruby 脚本处理它并存储在单独的文件中。我的问题是,生成的文件将包含数亿行,其中绝大多数是重复的。我想在将它们写入磁盘之前消除重复项。
我尝试过处理它们并将这些行放入一组中以消除重复项,然后再将它们写入输出文件,但最终我耗尽了内存并且脚本崩溃了。
有没有办法在 ruby 中有效地解决我的问题?
最佳答案
使用以下代码创建一个名为 uniq.rb
的文件:
require 'digest'
hashes = {}
STDIN.each do |line|
line.chomp!
md5 = Digest::MD5.digest(line)
next if hashes.include?(md5)
hashes[md5] = true
puts line
end
然后从命令行运行它:
ruby uniq.rb < input.txt > output.txt
主要思想是,您不必将整行保存在内存中,而只需使用 16 字节 MD5 哈希值(加上 true
值)来跟踪唯一行。
关于ruby - 在 ruby 中处理具有多个重复项的大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208174/