Вызовите File.readlines (или эквивалент) для заархивированных файлов БЕЗ их предварительной распаковки.

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

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


person Max Williams    schedule 11.10.2011    source источник
comment
По сути, вы хотите сопоставлять сжатые данные с текстом, не распаковывая их?   -  person Dave Newton    schedule 11.10.2011


Ответы (1)


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

require 'zlib'

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

Это загрузит весь файл в память, будьте осторожны.

person rdvdijk    schedule 11.10.2011