readlineを使用して、行単位でファイルを読み取ることができます。ノード内の行単位でファイルを効率的に読み取る
readline
.createInterface({input: fs.createReadStream('xxx')})
.on('line', (line) => { apply_regexp_on_line })
.on('close',() => { report_all_regexps });
しかし、私はgrep
とJavaScriptの正規表現のパフォーマンスを比較したので、これは、かなり遅いです、そして後者は、私がテストした正規表現に優れた性能を有します。 (benchmark参照)ノードの非同期readlineを責めなければならないと思います。私の状況で
ボーナスポイント:いくつかのログファイルはgzipで圧縮されているため、圧縮解除する必要があります。誰かが、プレーンテキストとgzippedテキストの両方に高速な行単位の読者を勧めてもらえれば、本当に感謝しています。
'apply_regexp_on_line'とは何でしょうか、あなたの文字列の置換を行うために' sed'プログラムを使うことは可能でしょうか?それはかなり速いです。おそらく、解凍とsed'ingを行うための素早く簡単なシェルスクリプトを書くことができます。 –
質問のベンチマークリンクをご覧ください。 'sed'はJavaScriptほど高速ではありません。基本的に 'apply_regexp_on_line'は、regexpを使ってログファイルのテキストをキャプチャして保存し、' report_all_regexps'はキャプチャされたテキストを与えられたフォーマットで報告します。情報をお寄せいただきありがとうございます。 – xis
'sed'がjavascriptの正規表現よりも遅くなることを期待していませんでした!お気に入りのトピックに追加されました。私も解決策を知りたいと思っています。 –