2010-12-20 5 views
6

多くの時間がソートされたバグに続きます...bash sortは異常な順序です。スペースに問題がありますか?

bashドキュメントで区切り文字が白から非白に変わる文字?最初のフィールドをソートしてはいけませんか? 0を使用して当然の

>sort myfile.txt 
10_10000000 19 
10_10000001 20 
10_10000002 19 
10_10000003 17 
10_10000004 16 
10_1000000 44 
10_10000005 16 
10_10000006 16 
10_10000007 17 
10_10000008 16 

は-1私に私期待される結果が得られます。

>sort +0 -1 myfile.txt 
10_1000000 44 
10_10000000 19 
10_10000001 20 
10_10000002 19 
10_10000003 17 
10_10000004 16 
10_10000005 16 
10_10000006 16 
10_10000007 17 
10_10000008 16 

いくつかのメタ情報:

>type sort 
sort is hashed (/bin/sort) 

私は

sort (GNU coreutils) 5.97 


>locale 
LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 
+1

あなたは 'sort 'のどのバージョンを使用していますか?どのOSで? 'type sort'の出力は何ですか? –

+0

また、 'locale'の出力は何ですか? – ephemient

+0

Bashはソートについて何も知らない - 'sort'は外部ユーティリティです。 '>'はBashにとって珍しいプロンプトです。 –

答えて

2

作品右用を使用しています私:

$ sort myfile.txt 
10_1000000 44 
10_10000000 19 
10_10000001 20 
10_10000002 19 
10_10000003 17 
10_10000004 16 
10_10000005 16 
10_10000006 16 
10_10000007 17 
10_10000008 16 

$ sort --version 
sort (GNU coreutils) 8.5 

数字の並べ替えを有効にするには、-nフラグが必要ですか?

9

ロケールベースの問題があります。いくつかの(多くの?)ロケールは、ソートの仕方に影響します。特定の文字は無視されます。この場合、ソートするフィールドを指定しないと、フィールド間のスペースが無視されているように見えます。スペースを削除すると、間違った場所にあるように見える行が正しいことがわかります。

あなたが別のロケールでソートを実行した場合、あなたはおそらく、異なる結果が得られます。

$ LANG=C sort myfile.txt 

は私のデフォルトのロケールがen_AU.UTF-8であると私はあなたのオリジナルのソート結果を参照してください。 LANG = Cを設定すると、期待している結果が表示されます。

+0

私は 'LANG = C'の代わりに' LC_ALL = C'を使う必要がありました。 – Mark

関連する問題