大きなログ ファイルが多数あります (各ログ ファイルは約 200 MB で、合計 200 GB のデータがあります)。
10 分ごとに、サーバーは約 10,000 個のパラメーター (タイムスタンプ付き) をログ ファイルに書き込みます。10,000 個の各パラメーターのうち、100 個を新しいファイルに抽出したいと考えています。
最初に1つのパラメーターでgrepを使用し、次にLC_ALL=C
少し高速化し、次にfgrepを使用しましたが、これもわずかに高速でした。次に、パラレルを使用しました
parallel -j 2 --pipe --block 20M
そして最後に、200MB ごとに、5 秒で 1 つのパラメーターを抽出することができました。
しかし.. 1つのgrepで複数のパラメータをパイプすると
parallel -j 2 --pipe --block 20M "egrep -n 'param1|param2|...|param100" < log.txt
その後、grep 操作の時間が直線的に増加しました (現在、1 つのファイルを grep するのにかなりの時間がかかります)。(複数のパイプにegrepを使用する必要があったことに注意してください。どういうわけか、grepはそれらを気に入らなかったのです)。
この問題を解決するためのより速い/より良い方法はありますか?
探しているパターンは固定されているため、正規表現を使用する必要がないことに注意してください。特定の文字列を含む特定の行を抽出したいだけです。