grep -x って知ってましたか?

ユースケース

はじめに言っておくと かなりニッチなユースケースです。笑

アクセスログから特定のURLにアクセスしたユーザの中で リスト(user_list)にあるユーザのアクセス回数を調べる。

grep -x の使いどころ

※前提条件としてアクセスログの12カラム目にユーザIDが出力されていることとする。

今までは

cat access.log | grep ${特定のURL} | awk '{print $12}' | grep -f user_list | sort | uniq -c

こんな感じでやってたのですが、かなり時間がかかります。。

で、最近知ったgrep x オプション

cat access.log | grep ${特定のURL} | awk '{print $12}' | grep -x -f user_list | sort | uniq -c

あらビックリ!同じ結果なのに実行時間が10分の1以下に!! (アクセスログのサイズにもよると思います)

解説

manの解説では

-x, --line-regexp

パターンが行全体とぴったりマッチしたときにのみ、その行を選択します。 (-x オプションは POSIX で規定されています)

とのこと。

要するに完全一致のみを抽出するので一致しない時の判定が速く済み、結果処理が速くなるということらしいです。

皆さんも是非お試しあれ。