cutとawkの速度

ログファイルを参照して特定のリクエストに関してソースIPアドレスをカウントして欲しいとのリクエスト。
grepawkとuniq -cのワンライナーでまぁ速攻でやっつけました。ところで標準出力でもファイルでも特定のフィールドを切り出すときに私はいつもawkを使っています。
CLFでソースIPアドレスを切り出すならこんな感じですね。

$ cat http_access_201410* | awk '{print $1}'

UNIXコマンドにはcutってのもあって、上記と同等の動作ならば

$ cat http_access_201410* | cut -d' ' -f1

どっちでもいいんですが、技術者一年目の時に覚えたのがawkで、文法的にもわかりやすいし切り出しだけじゃなくていろんなことができるのでawkを使ってるんですね。
今日ふと気になりました。どっちが早いんだろう。早速計測。昨月のアクセスログからソースIPアドレスを切り出してみます。

cutの結果。上記コマンドをtimeに喰わせた結果です。対象行数は約2550万行。

real	4m25.531s
user	4m8.726s
sys	0m13.110s

awkの結果。

real	0m27.784s
user	0m18.832s
sys	0m8.754s

ほー、これは意外。単純(だと思われる)なcutの方が早いんだろうと予想していたら、意外にもawkの圧勝。これからも安心してawkを使い続けることにします。さすがはカーニハン博士。