#ruby #gzip
#ruby #gzip
Вопрос:
Я пытаюсь написать задачу rake для сканирования некоторых архивированных файлов журналов и извлечения некоторых данных, которые я затем могу использовать для обновления некоторых записей базы данных. Из-за ограничений пространства на нашем сервере я не могу разархивировать все файлы и просто вызвать File.readlines для них, что я обычно и делаю.
Может ли кто-нибудь предложить альтернативный подход, который не требует разархивирования файлов? Что мне нужно сделать, это в основном сканировать строки, соответствующие определенному регулярному выражению, затем извлечь некоторый текст из строки ПОСЛЕ соответствующей строки. Все они находятся в архиве и, следовательно, являются файлами .gz.
Комментарии:
1. По сути, вы хотите сопоставить сжатые данные с текстом, не распаковывая их?
Ответ №1:
Вы можете открыть архивированный файл с помощью Ruby и выполнить поиск, как если бы вы открыли файл в обычном режиме, вот так:
require 'zlib'
Zlib::GzipReader.open("myfile.gz") { |gz|
# place your code here, something like:
p gz.readlines.grep /my-magic-marker/
}
Это загрузит весь файл в память, остерегайтесь этого.