2011-08-23 6 views
6

[これは私が後で尋ねた同様の質問の書き換えです.​​..]混乱のために申し訳ありません!]UNIXソートユーティリティで、オプション-bを指定せずに先頭のスペースを無視するのはなぜですか?

私は先導と標準sortユーティリティについて混乱しています。 myfileの内容を考えてみましょう:sort -t : myfileを実行

a 
b 
    a 

は、少なくとも私には、予期しない結果が得られます。

a 
    a 
b 

んが理にかなっていますか? <space>は、a-zの前(ASCIIの場合のように)または後に来る必要があります。それが含まれていなかったとき場合に、第2の場合には

a 
b 
    a 

はなぜ、その後、sortは(先頭のを無視する)-bオプションを適用するように見えるんしながら、最初のケースでは、私は

a 
b 
a 

を期待します?実際、安全のために、各行に正確に1つのフィールドを持たせるために、-tオプションを追加しました。 (According to the POSIX standard「Aフィールドは非分離文字の最大シーケンスを含み、オプション-tがない場合は前のフィールドセパレータを含みます」

ありがとうございます! manページから

答えて

9

ロケールによって異なります。

LC_COLLATE=en_US.utf8 sort myfile 

で、私はあなたの予想外の結果を取得し、

LC_COLLATE=C sort myfile 

と私はあなたの期待される結果を取得します。また、(私はソート-b扱う理由を知っているし、このように-tません。)bash sort unusual order. Problem with spaces?

を参照してください

+0

1:謙遜:) –

+0

@Ernest:これの十分な!私は謙虚さを取り除いた。 –

+0

ありがとう!どのようにソートがen_US.UTF-8で動作するかについては、私はそれを理解できません... [colletion chart](http://www.collat​​ion-charts.org/opensolaris/opensolaris.2008.05.en_US.UTF- 8.html)en_US.UTF-8は、AとBの間にスペースがありません。 –

7
$ sort -t : foo 
a 
    a 
    b 
$ env LC_ALL=C sort -t: foo 
    a 
    b 
a 

* WARNING *環境で指定されたロケールがソート順に影響します。ネイティブバイト値を使用する従来のソート順を取得するには、LC_ALL = Cを設定します。

関連する問題