«前の日記(2012.02.07 / Tuesday) 最新 次の日記(2012.02.10 / Friday)» 編集

Hena Hena Nikki

2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|10|11|12|
2012|01|02|03|04|05|06|07|08|10|12|
2013|01|02|04|06|

2012.02.08 / Wednesday [長年日記]

* [computer] grep vs. awk vs. perl

「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

以下、補足。

  • GNU grep 2.5.1が読み込んでいるlibpcreはver.7.9。
  • GNU grep 2.7が読み込んでいるlibpcreはver.8.20。

  • この日記には本日 名の方が訪問してくださっているようです。 また、昨日は 名の方が訪問してくださったようです。
  • この日記の更新情報の取得には antenna.lirs を利用するのがおすすめです。