(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】日本語テキストをsort及びuniqする際の注意点

スポンサーリンク

注意点

LANG設定によっては正しくsortされず、uniqオプションを利用すると情報が抜け落ちてしまう。

環境情報
$ sort --version
sort (GNU coreutils) 8.26
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.

解説

例えば以下のようなtestという名称の日本語ファイルを用意した際に

$ cat test
カエデ
アイカ
カエデ
アイカ
テスト
$ file test
test: UTF-8 Unicode text

言語設定が日本語になっていない場合に

$ echo $LANG
en_US.UTF-8

sortコマンドが機能していません。

$ sort test
カエデ
アイカ
カエデ
アイカ
テスト

ポイントとして、きちんと並び変えられる日本語が多数です。一部の日本語間でsort結果がおかしくなってしまいます。

この状態でuniqオプションを指定すると

$ sort -u test
カエデ

想定とは異なる出力結果になってしまいます。

対策

コマンド実行前に「LANG=ja_JP.UTF-8」を指定します。

実行結果は以下のようになり

$ LANG=ja_JP.UTF-8 sort test
アイカ
アイカ
カエデ
カエデ
テスト

uniqオプションにて欲しい情報が出力されます。

$ LANG=ja_JP.UTF-8 sort -u test
アイカ
カエデ
テスト

uniqオプションを利用する場合も指定するとLANG=ja_JP.UTF-8を付与しなければ情報が抜け落ちてしまいおかしな結果になる危険性があるので、ご注意ください。