2011-06-30 6 views
2

ソート文字列をこのように注文しない理由私はlinuxの並べ替え予期しない出力

 
ABC 
AB-C 
ABCDEFG-HI 

を取得しますか?アルファベット順に並べ替えるにはどうすればいいですか?

+0

あなたが使用している正確な 'sort'呼び出しを投稿してください。間違っている可能性があります。 – DarkDust

答えて

4

@cnicutarによって提供される解決策は正しいですが、その理由は説明が必要なので、私は新しい答えを出しています。 en_US:

は最後に、私はcoreutilsのバグの疑い@cnicutarとの議論の後ケースが折り畳まれ、句読点があるため無視されるので、その時点の並べ替えで

壊れて表示されsortを私はthis sorting behavior is expectedがことがわかりました「 .UTF-8 'はこの動作を指定します。

次のようにsortに、あなたの入力がマッピングされているように見える:

ABC -> ABC 
AB-C -> ABC 
ABCDEFG-HI -> ABCDEFGHI 

あなたは純粋なASCIIソートしたい場合は、sortどの手段を呼び出すときに、一時的にCにロケールを設定する(LC_ALL=C sortを呼び出す必要がありますローカライズされていない "標準"の動作; Cの代わりにPOSIXを使用することもできます)。

他のUnixでは、この動作は異なっているようですが(Mac OS XではどのユーザランドツールがFreeBSDから派生しているかテストされています)、LC_ALL=C sortはすべてのPOSIXシステムで同じ動作をするはずです。

+0

おかげで、ありがとう:-) – cnicutar

2

私はこの:)を覚えているが)

[[email protected] ~]$ LANG=POSIX sort 
ABC 
AB-C 
ABCDEFG-HI 
AB-C 
ABC 
ABCDEFG-HI 

またLANG=C動作するはずですしてみてください。

+0

'AB-C'が途中に表示されるような言語設定はありません(EBCDICでさえないので)、これは問題ではなく、代わりにuser678070が' sort'を呼び出す方法です。 – DarkDust

+0

@DarkDust私はちょうど異なるLANGで試しました。 'en_US.utf8'ではopが言っていることをします(前にこの問題がありました)。 'locale -a'を行い、いくつかを選んでください。 – cnicutar

+0

@cnicutar:私はそれを自分で試してみましたが、正しいソートを得ています。そして、ASCII文字のみが使用されていることを考えると、 'en_US.utf8'は、UTF-8がASCIIをサブセットとして持つので、この奇妙な並べ替えが発生することは非常に疑問です。 'LANG = foobar'を使用しているときに" unsorted "出力を得ますか?もしそうなら、あなたの 'sort'はロケールが見つからないときはソートしません。 – DarkDust

関連する問題