2016-09-25 49 views
0

最近、私は高速検索を実行するコマンドラインツールを検索していました。これらのうち、Agがgrep、ack、siftよりも早く伝えられるとの私の理解です。 grepが最も遅い。Agがgrepよりも遅いのはなぜですか?

ファイルに300.000文字列があり、特定の部分文字列を持つ文字列を見つけて返します。

time grep 'substring' file.txt 

real 0m0.030s 
user 0m0.009s 
sys  0m0.008s 

time ag 'substring' file.txt ----> 5 secs 

real 0m0.083s 
user 0m0.038s 
sys  0m0.014s 

私は何か間違っているのですか、それとも私はそれを使用しようとしている方法で使用されていませんか?

+0

ここで重要な点は、これらの2つのコマンドライン呼び出しが実際には同じことをしないことです。 'ag'呼び出しは、大文字と小文字を区別しないマッチング*を行い、*は行を数えます。 'grep'はどちらもしません。 –

+0

@ThomasOrozcoしかし、agは "grepのより高速な代替"として記述されています。もしagの機能がgrepの機能と異なるならば、 – RetroCode

+1

Agは、コードベースを検索するために設計されています。 grepよりも高速です。検索すべきファイルを探し出し、集計などで処理する方が効率的だからです。つまり、grepとAgは異なる目的のための異なるツールです。あなたが提供した意図的な例は、単にgrepが輝き、Agはそうでないものです。このトピックについて多くのことが言及されていますが、実際には短い答えはありません。 [このブログの記事](http://blog.burntsushi.net/ripgrep)(これは別のツールに焦点を当てています: 'rg')は、「より速い」ということを決定する複雑さの良い調査です。 –

答えて

0

Grepは本当に効率的です。しかし、たとえAgが1つのシステムで高速であったとしても、使用しているパッケージとディストリビューションにすべてが含まれます。

grep上で64ビット(Cygwinパッケージ上)を使用している場合は、システム上でより多くのメモリを利用できます。 Agは、より少ないリソースを使用しているパッケージを持っている可能性があります。

parallelコマンドを使用することをお勧めします。このコマンドを使用すると、コアあたりのプロセス数を指定して処理速度を上げることができます。

関連する問題