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