Я уже узнал, что readline может использоваться для чтения файла по строкам, например.Эффективно читайте файл по строкам в узле
readline
.createInterface({input: fs.createReadStream('xxx')})
.on('line', (line) => { apply_regexp_on_line })
.on('close',() => { report_all_regexps });
Однако, это довольно медленно, так как я сравнил производительность grep
и JavaScript регулярных выражений, а последний имеет более высокую производительность на регулярных выражений, которые я тестировал. (см. benchmark) Итак, я думаю, что я должен обвинять асинхронный readline узла.
В моей ситуации мне вообще неинтересно, я просто должен использовать быстрое регулярное выражение JavaScript для обработки очень больших файлов журнала (обычно 1-2 ГБ, иногда до 10 ГБ). Каков наилучший способ сделать это? Меня беспокоит только скорость.
Бонусные баллы: некоторые файлы журналов являются gzipped, поэтому мне нужно их распаковать. Если кто-то может порекомендовать мне быстрый линейный считыватель как для обычного текста, так и для gzipped-текста, я был бы очень благодарен.
Не знаете, что делает 'apply_regexp_on_line', но можно ли использовать программу unix' sed' для выполнения ваших строк? Это довольно быстро. Вероятно, можно написать быстрый и простой сценарий оболочки, чтобы делать распаковку и seding. –
См. Ссылку в вопросе. 'sed' не так быстро, как JavaScript. В основном 'apply_regexp_on_line' будет захватывать некоторый текст в файле журнала с помощью regexp и хранить его, а' report_all_regexps' будет передавать захваченный текст в заданном формате. – xis
благодарит за информацию. Не ожидал, что 'sed' будет медленнее, чем регулярное выражение javascript! поднял проголосовавшую тему && добавил в избранное. Я тоже хочу знать решение. –