1. ホーム
  2. bash

[解決済み] 最速のgrep

2023-08-30 08:15:35

質問

を作るためのヒントがあれば教えて欲しいです。 grep をできるだけ速くするためのヒントがあれば教えてください。私はかなり大きなテキストファイルのベースを持っているので、できるだけ速く検索する必要があります。それらをすべて小文字にすることで -i というオプションを追加しました。これによって、検索がずっと速くなります。

また -F-P の2つのモードがあり、デフォルトのものよりも高速に動作します。検索文字列が正規表現でない(単なるプレーンテキスト)場合は前者を、正規表現が含まれる場合は後者を使うことにしています。

を高速化した経験をお持ちの方はいらっしゃいますか? grep ? 例えば、ある特定のフラグで一からコンパイルするとか (私は Linux CentOS を使っています)、ある方法でファイルを整理するとか、あるいは何らかの方法で検索を並列化させるとか?

どのように解決するのですか?

次のようにしてください。 GNU並列 には との併用方法の例 grep :

grep -r grepsはディレクトリを再帰的に検索します。マルチコアCPUでは、GNU parallel はしばしばこれを高速化することができます。

find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {}

これは1コアあたり1.5ジョブを実行し、1000の引数を grep .

大きなファイルの場合、入力をいくつかのチャンクに分割することができます。 --pipe--block という引数があります。

 parallel --pipe --block 2M grep foo < bigfile

SSH を使って複数の異なるマシンで実行することもできます (パスワードを避けるために ssh-agent が必要です)。

parallel --pipe --sshlogin server.example.com,server2.example.net grep foo < bigfile