読者です 読者をやめる 読者になる 読者になる

LC_ALL環境変数とsortコマンド

shell speed

自分の環境では、sortコマンドを実行する時にLC_ALL環境変数に'C'をセットするかしないかで、処理終了までの時間が著しく変わる。

# 約40万行のデータ
> wc -l words 
392126 words

# 入っているのはUTF-8の日本語(IPA辞書を利用)
> head words
やぼったい
やぼったし
やぼったから
やぼったかろ
やぼったかっ


# 普通のソート
> time sort words > /dev/null
real	0m37.158s
user	0m37.098s
sys	0m0.056s

# LC_ALL=Cでのソート
> time LC_ALL=C sort words > /dev/null
real	0m0.293s
user	0m0.284s
sys	0m0.008s

ロケールを考慮してソートするかどうかの違いだと思うが(LC_ALL=Cの場合は、多分単純にバイト列としてソートされる)、全然時間が違う。

処理時間以外に、デフォルトのロケールUTF-8の環境で、euc-jpで作成されたファイルをソートしようとすると(無理やりUTF-8として解釈しようとするため?)変な順番になったりすることもあるので、最近はLC_ALL=Cをつけてソートすることが多い。 あと、文字列=バイト列のプログラミング言語との相性もLC_ALL=Cをつけたソートの方がいいかな