連結 grep より 単体 awk2010年11月13日 07時35分47秒

大量の巨大なファイルを解析する必要があって、プログラムの効率を比べてみた。cat * > /dev/null をするだけで、十五分ぐらい掛かる。毎朝、走らせる予定のスクリプトなので速くしておきたいのだ。一回しか行わないのなら、十五分でも三十分でも大して気にしないのだが、朝の十五分は大差が出る。

そこで最初に目に付いたのが、文字列の検索。ある文字列を含む行は除外した後に、特定の文字列を含む行を処理する。grep と grep -v を連結したほうが早いか、awk のみで処理したほうが速いかを比べてみた。

Solaris で比べたところ、grep を連結したほうがどちらの順番でやっても awk の二倍の実時間三十分掛かった。grep | grep -v でも grep -v | grep でもあまり変わらない。awk だけで処理をすると十五分で終わる。この二つの大きな違いといえばパイプの IO。基本的にはディスク待ちで、プロセスを二つ作っても関係無いはずなのだが、ちょっとその部分が気になる。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2010/11/13/5499536/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。