「GNU grepよりGNU Awkの方が速い!」という噂を聞いたので、iMac Late 2006 (Core 2 Duo 2.0GHz, PC2-5300 DDR2 3GB) で試してみた。 結果は逆で、「GNU grepの方がGNU Awkより速い!」となった。
$ uname -a Darwin hoge.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386 i386 iMac5,1 Darwin $ env | grep -E '^LANG|^LC_' LANG=ja_JP.UTF-8 LC_CTYPE=ja_JP LC_MESSAGES=ja_JP LC_TIME=ja_JP LC_MONETARY=ja_JP LC_NUMERIC=ja_JP LC_COLLATE=ja_JP $ ls -lh -rw-r--r-- 1 shindoh staff 3.1G 2011-11-02 09:34 travel.rl5.arpa $ head -n 20000 travel.rl5.arpa | tail -4.775169 担ぐ:カツグ:47/11/1 -0.8617506 -5.986976 担っ:ニナッ:47/21/5 -0.421649 -5.31356 担任:タンニン:17 -0.446677 -4.29678 担当:タントー:17 -0.4471196 -4.868286 拉:ヒシゲ:47/6/4 -0.5031412 -5.21929 拉致:{ラッチ/ラチ}:17 -0.4342381 -5.326924 拍子:{ヒョーシ/ビョウシ}:2 -0.5167279 -5.032733 拍子抜け:ヒョーシヌケ:17 -0.6287512 -4.670706 拍手:ハクシュ:17 -0.6786987 -5.928984 拍車:ハクシャ:2 -0.3531258 $ /usr/bin/grep --version grep (GNU grep) 2.5.1 [...] $ otool -L /usr/bin/grep | grep 'pcre' /usr/lib/libpcre.0.dylib (compatibility version 1.0.0, current version 1.1.0) $ /usr/bin/grep -E '^-0' travel.rl5.arpa | wc -l 16360594 97.851u 5.024s 2:04.64 82.5% 0+0k 1+0io 0pf+0w $ env LC_ALL='C' /usr/bin/grep -E '^-0' travel.rl5.arpa | wc -l 16360594 18.128u 4.907s 1:09.07 33.3% 0+0k 2+1io 0pf+0w $ /usr/local/bin/grep --version /usr/local/bin/grep (GNU grep) 2.7 [...] $ otool -L /usr/local/bin/grep | grep 'pcre' /usr/local/lib/libpcre.0.dylib (compatibility version 1.0.0, current version 1.1.0) $ /usr/local/bin/grep -E '^-0' travel.rl5.arpa | wc -l 16360594 72.505u 4.873s 1:28.34 87.5% 0+0k 1+0io 0pf+0w $ env LC_ALL='C' /usr/local/bin/grep -E '^-0' travel.rl5.arpa | wc -l 16360594 19.287u 4.812s 1:06.63 36.1% 0+0k 0+0io 0pf+0w $ /usr/bin/awk --version awk version 20070501 $ /usr/bin/awk '/^-0/ {print $0}' travel.rl5.arpa | wc -l 16360594 115.462u 7.050s 2:57.60 68.9% 0+0k 1+0io 0pf+0w $ env LC_ALL='C' /usr/bin/awk '/^-0/ {print $0}' travel.rl5.arpa | wc -l 16360594 115.742u 7.463s 3:07.98 65.5% 0+0k 3+1io 0pf+0w $ /usr/local/bin/awk --version GNU Awk 3.1.8 [...] $ /usr/local/bin/awk '/^-0/ {print $0}' travel.rl5.arpa | wc -l 16360594 159.198u 28.878s 3:16.75 95.5% 0+0k 2+0io 0pf+0w $ env LC_ALL='C' /usr/local/bin/awk '/^-0/ {print $0}' travel.rl5.arpa | wc -l 16360594 65.735u 28.889s 1:47.37 88.1% 0+0k 2+0io 0pf+0w $ /usr/bin/perl --version
This is perl, v5.10.0 built for darwin-thread-multi-2level [...] $ /usr/bin/perl -lne '/^-0/&&print' travel.rl5.arpa | wc -l 16360594 36.713u 9.318s 1:07.40 68.2% 0+0k 22+1io 0pf+0w $ env LC_ALL='C' /usr/bin/perl -lne '/^-0/&&print' travel.rl5.arpa | wc -l 16360594 36.064u 8.844s 1:05.19 68.8% 0+0k 52+0io 0pf+0w $ /usr/local/bin/perl --version
This is perl 5, version 14, subversion 2 (v5.14.2) built for darwin-2level [...] $ /usr/local/bin/perl -lne '/^-0/&&print' travel.rl5.arpa | wc -l 16360594 32.000u 6.284s 1:00.84 62.9% 0+0k 10+0io 0pf+0w $ env LC_ALL='C' /usr/local/bin/perl -lne '/^-0/&&print' travel.rl5.arpa | wc -l 16360594 32.099u 6.200s 1:04.30 59.5% 0+0k 1+0io 0pf+0w
以下、補足。