web-dev-qa-db-ja.com

並べ替えコマンドの動作が間違っていますか?

buntu desktop 14.04 (Trusty Tahr)でファイルのコンテンツをソートしようとしました。私の場合、期待される結果は元のコンテンツと同じであるはずですが、実際の結果はそうではありません。どうして?

# cat test.txt
a++-a
a++-b
a++-c
ab
ac
# cat test.txt | sort
a++-a
ab
a++-b
ac
a++-c
13
user2909884

LC_ALL変数を使用して、sortを呼び出す前にLC_ALL=Cに設定できます。

$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac

これが何であるかを知りたい場合は、 this answerを読んでくださいLC_ALL=C。ここに短い要約があります:

Cロケールは、最も単純なロケールであるための特別なロケールです。他のロケールは人間用ですが、Cロケールはコンピューター用です。 Cロケールでは、文字は1バイト、文字セットはASCII、ソート順はバイト値に基づきます。

また、@ KenMollerupが指摘したように、man sortからの引用

   ***  WARNING  ***  The locale specified by the environment affects sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.

したがって、LC_ALL=Cでソートを使用する場合、ソートはシンボルをバイト単位で比較します。それ以外の場合、sortは英数字以外のすべての文字を無視します。

16
c0rp

ソートでは、アルファベット順および数値ソートを使用します。私たちと同様に、+-<> ...などの特殊文字は無視され、数値は数値として扱われるため、1、2、3。の前に11、12 1066 1104が表示されます。

リストはaa、ab、ab、ac、acのように表示されます

8
Ken Mollerup