トップページ | 過去記事(月別カテゴリー別) | 掲示板 | 野良DEB,RPM | 更新チェック | Twitter
<<  2012.3  >>
SMTWTFS
    123
45678910
11121314151617
18192021222324
25262728293031
 
リンク
その他
  • RSS2.0
  • Credit

  • SEO
    loading

    プライバシーポリシー
    Google

カテゴリー » Linux March 10, 2012

sort を使うときは,LC_ALL=C を忘れずに - ny23の日記 Linux

http://d.hatena.ne.jp/ny23/20100611/p2

言語環境(ロケール)によってsortコマンドの速度が変わるらしいです。

数十万行のテキストファイルでテキトーに比較してみました。
$ time LANG=C sort hoge.txt > /dev/null
real	0m0.262s
user	0m0.196s
sys	0m0.064s

$ time LANG=ja_JP.UTF-8 sort hoge.txt > /dev/null
real	0m2.053s
user	0m1.952s
sys	0m0.068s

$ time LANG=en_US.UTF8 sort hoge.txt > /dev/null
real	0m13.438s
user	0m13.381s
sys	0m0.048s
確かに C が飛び抜けて一番ですね。英語(en_US.UTF8)より日本語(ja_JP.UTF-8)の方が速いのが意外でした。

結果に違いはあるのかな?
$ a="あ z
は m
ん a
・ o"

$ echo "$a" | LANG=C sort
あ z
は m
ん a
・ o
(文字コード番号の順番?)

$ echo "$a" | LANG=ja_JP.UTF-8 sort
・ o
あ z
は m
ん a
(平仮名より点が上になる?)

$ echo "$a" | LANG=en_US.UTF8 sort
ん a
は m
・ o
あ z
(先頭の日本語が無視されて、横のアルファベットで判断?)
速度だけでなく並び替えも変化するのか…

数値の比較方法も変わるようです。はてなブックマークのコメントに書いてあった例を書くと
$ echo -e "1,300,000\n200000" | LANG=C sort -n
1,300,000
200000

$ echo -e "1,300,000\n200000" | LANG=ja_JP.UTF-8 sort -n
200000
1,300,000
11:45 pm | コメントする |

上の記事に対するコメント

1. こで@なごみ大明神 (Website)  2012/03/11 10:59
ほほー、それは知りませんでした。。。
アルファベットだけの比較ならロケールはCにしておくと幸せになれるという事なんですね。

sortコマンドのネタとしては、(私だけの環境だったのかしら)KDEとGnomeに変えただけで順序が変わりました。

正確には、現在使っている最新のFedora16 KDEと、LiveCDのGnomeでの比較になるので、ひょっとしたらsortコマンドのバージョンが違ったのかもしれませんが・・・。

2. Owner CommentSawa  2012/03/11 23:45
>アルファベットだけの比較なら
日本語混じりでも、大概 C でいいんじゃないかな

>KDEとGnomeに変えただけで順序が
>最新のFedora16 KDEと、LiveCDのGnomeでの比較
うーん、LiveCD上だとシステムのロケール変更がうまくいかないから、だったり?

コメントをどうぞ。名前とURLはオプションです。

Comment Form
NAME:
URL:
文字色:  

累計:225314、今日:1148、昨日:1348
Created in 0.0139 sec.