UNIXでファイル内の文字列パターンを探したい。私は以下のコマンドを使用します:UNIXでファイル内の文字列を見つけるための速い方法
$grep 2005057488 filename
しかし、ファイルには何百万もの行が含まれていますが、そのようなファイルはたくさんあります。 grep以外のパターンを取得する最も速い方法は何ですか?
UNIXでファイル内の文字列パターンを探したい。私は以下のコマンドを使用します:UNIXでファイル内の文字列を見つけるための速い方法
$grep 2005057488 filename
しかし、ファイルには何百万もの行が含まれていますが、そのようなファイルはたくさんあります。 grep以外のパターンを取得する最も速い方法は何ですか?
sed -n '/2005057488/p' filename
grepよりも高速かどうかはわかりません。
grep
は一般的にはそれほど速いです。それは1つのものと1つのものにしか設計されておらず、それは非常にうまくいっています。あなたはなぜhereを読むことができます。
しかし、物事をスピードアップするために、試してみることができるいくつかのことがあります。まず、探しているパターンが固定文字列であるように見えます。幸い、grep
は「固定文字列」オプションがあります。
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)
、grep
はUTF-8
上で、一般的にはかなり遅いので、あなたは環境LANG=C
を設定することで、各国語サポート(NLS)を無効にしてみてください可能性があります。そのため、あなたはこの調合を試みることができる:
LANG=C grep -F "2005057488" file
は第三に、それはあなたの質問に明確ではありませんでしたが、あなたが唯一の何かがあなたのファイルに一度存在するかどうか検索しようとした場合、あなたはまたの最大数を追加してみてください可能性がありパターンを見つける時間。したがって、-m 1
の場合、grep
は、最初の発生が検出された直後に終了します。あなたのコマンドは次のようになります。あなたはマルチコアのCPUを持っている場合
LANG=C grep -m 1 -F "2005057488" file
最後に、あなたがGNU parallel行くを与えることができます。それにはexplanation of how to use it with grepも付属しています。コアあたり1.5ジョブを実行し、grep
1000個の引数を与えるために:並列使用--pipe
で
find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {}
grep
への大きなファイル:
< bigfile parallel --pipe grep STRING
あなたのディスクとCPUに依存して、より大きな読むために速いかもしれブロック:
< bigfile parallel --pipe --block 10M grep STRING
grepはsedよりも速く動作します。
$grep 2005057488 filename
$sed -n '/2005057488/p' filename
まだどちらも、それはそうだファイル
でその特定の文字列を取得するために動作します。 'grep'はちょうど1つのことをするように設計されています(私の答えを見てください) – Steve
@steve、私は私の答えを削除すべきですか? SOの新しい。助けてください。 – Anon