Вызовите File.readlines (или эквивалентные) для заархивированных файлов, БЕЗ их разархивирования - PullRequest
0 голосов
/ 11 октября 2011

Я пытаюсь написать задачу rake, чтобы просмотреть некоторые сжатые файлы журнала и извлечь некоторые данные, которые затем я могу использовать для обновления некоторых записей базы данных.Из-за нехватки места на нашем сервере я не могу разархивировать все файлы и просто вызвать на них File.readlines, что я обычно и делаю.

Может кто-нибудь предложить альтернативный подход, который не включает в себя разархивирование файлов?Что мне нужно сделать, это в основном сканировать строки, соответствующие определенному регулярному выражению, а затем извлечь некоторый текст из строки ПОСЛЕ совпадающей строки.Все они сжаты и, следовательно, являются файлами .gz.

1 Ответ

1 голос
/ 11 октября 2011

Вы можете открыть gzip-файл с помощью Ruby и выполнить поиск, как если бы вы открыли файл как обычно, например:

require 'zlib'

Zlib::GzipReader.open("myfile.gz") { |gz|
  # place your code here, something like:
  p gz.readlines.grep /my-magic-marker/
}

Это загрузит весь файл в память, остерегайтесь этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...