使用 grep sort 等工具的时候要注意 LANG 的设置

发现在使用 sort 或 grep 等工具的时候,LANG 会影响到速度。

1.5G 的文件,grep -Ei ‘keyword’ file, LANG=C 的时候执行时间是 22 秒,LANG=en_US.UTF-8 的时候,执行时间是 3分53秒,最后结果是一样的。

这还不是最恐怖的,恐怖的是下面的

$ cat a
a
b
C
d
E
 
$ LANG=en_US.UTF-8 egrep '[a-z]' a
a
b
C
d
E
 
$ LANG=C egrep '[a-z]' a
a
b
d

以后用这些工具还是小心一点吧。。。。。

Related posts:

  1. 揭开正则表达式语法的神秘面纱zz
  2. eclipse 对 jdk 1.4 的依赖
  3. awk 数组的一个应用

5 Comments

  1. Posted 七月 12, 2010 at 1:58 下午 | Permalink

    不是吧,我这儿结果都一样阿,ubuntu 10.04
    vvoody@luo:~/lab$ cat a
    a
    b
    C
    d
    E
    vvoody@luo:~/lab$ LANG=en_US.UTF-8 egrep ‘[a-z]‘ a
    a
    b
    d
    vvoody@luo:~/lab$ LANG=C egrep ‘[a-z]‘ a
    a
    b
    d
    vvoody@luo:~/lab$

  2. Posted 七月 15, 2010 at 12:01 下午 | Permalink

    你那有 en_US.UTF-8 这个 locale 么?
    $ locale -a
    C
    en_US.utf8
    POSIX
    zh_CN.utf8

    $ LANG=en_US.gbk egrep ‘[a-z]‘ a
    a
    b
    d

    如果是一个没有的 locale,结果也是正确的。

  3. Posted 七月 15, 2010 at 12:03 下午 | Permalink

    没有 zh_CN.gbk 的时候

    $ LANG=zh_CN.gbk egrep ‘[a-z]‘ a
    a
    b
    d

    我加了一个 zh_CN.gbk 后,结果是这样的。。…

    $ LANG=zh_CN.gbk egrep ‘[a-z]‘ a
    a
    b
    C
    d
    E

  4. Posted 七月 16, 2010 at 2:29 下午 | Permalink

    $ locale -a
    C
    en_AG
    en_AU.utf8
    en_BW.utf8
    en_CA.utf8
    en_DK.utf8
    en_GB.utf8
    en_HK.utf8
    en_IE.utf8
    en_IN
    en_NG
    en_NZ.utf8
    en_PH.utf8
    en_SG.utf8
    en_US.utf8
    en_ZA.utf8
    en_ZW.utf8
    POSIX
    zh_CN.utf8
    zh_SG.utf8

    GNU grep 2.5.1-cvs
    都正常的结果

  5. Posted 七月 17, 2010 at 10:00 下午 | Permalink

    我靠,我也不知道怎么回事了,我的 grep 2.6.3

Post a Comment

Your email is never shared.