2

今日、Linux の sort コマンドでファイルをソートする際に質問を見つけました。env LANG=En_US を設定すると、期待どおりの結果が得られます。しかし、LANG=en_US の場合は奇妙な結果になります。私が実行したいくつかのコマンドと出力は次のとおりです。

[work@xx:/data1/muce_temp/datamarts/reduce_result_file/302/1d/201212260000]$ cat dd.dat                 
23 340_guard    16                                                                                                        
23 340_guard    17                                                                                                        
23 340_guard    18                                                                                                        
23 360_guard... 16                                                                                                      
23 360_guard    16                                                                                                        
23 360_guard... 17                                                                                                      
23 360_guard... 18              

[work@xx:/data1/muce_temp/datamarts/reduce_result_file/302/1d/201212260000]$ LANG=En_US sort dd.dat     
23 340_guard    16                                                                                                        
23 340_guard    17                                                                                                        
23 340_guard    18                                                                                                        
23 360_guard    16                                                                                                        
23 360_guard... 16                                                                                                      
23 360_guard... 17                                                                                                      
23 360_guard... 18                                 

[work@xx:/data1/muce_temp/datamarts/reduce_result_file/302/1d/201212260000]$ LANG=en_US sort dd.dat     
23 340_guard    16                                                                                                        
23 340_guard    17                                                                                                        
23 340_guard    18                                                                                                        
23 360_guard... 16                                                                                                      
23 360_guard    16          (why this line appear here ? )                                                                                      
23 360_guard... 17                                                                                                      
23 360_guard... 18      

このファイルの行のフォーマットの詳細は次のとおりです。

2^E3^F360_guard^E...^I16^Ee^E17/18^I63776769$
2^E3^F360_guard^E^I16^Ee^E17/18^I63776769$
2^E3^F360_guard^E...^I17^Ei^E0^I63776771$
2^E3^F360_guard^E...^I18^Ei^E1^I63776773$

^E は '\x05' 、^F は '\x06'、^I はタブ、$ は '\n' です。

前もって感謝します。

4

2 に答える 2

0

en_US は、よりスマートなソート アルゴリズムを呼び出します。このアルゴリズムは、ソートで通常無視されるようなドットの文字列を無視します。明らかに大文字と小文字が区別されるため、En_US は既定の言語 (おそらく C) に戻ります。

于 2012-12-30T05:06:45.410 に答える
0

「en_US」は、「Language=English、locale=United States」の「正しい」値です。その他のロケールには、「en_GB」(英国)、「en_CA」(カナダ)、および en_AU (オーストラリア) があります。

次の結果が得られます。

echo $LANG;sort tmp.txt
en_US.UTF-8
23 340_guard    16
23 340_guard    17
23 340_guard    18
23 360_guard    16
23 360_guard... 16
23 360_guard... 17
23 360_guard... 18

export LANG=en_US;echo $LANG;sort tmp.txt
en_US
23 340_guard    16
23 340_guard    17
23 340_guard    18
23 360_guard    16
23 360_guard... 16
23 360_guard... 17
23 360_guard... 18

export LANG=En_US;echo $LANG;sort tmp.txt
En_US
23 340_guard    16
23 340_guard    17
23 340_guard    18
23 360_guard    16
23 360_guard... 16
23 360_guard... 17
23 360_guard... 18

 export LANG=abc-silly;echo $LANG;sort tmp.txt
abc-silly
23 340_guard    16
23 340_guard    17
23 340_guard    18
23 360_guard    16
23 360_guard... 16
23 360_guard... 17
23 360_guard... 18
于 2012-12-30T05:13:48.677 に答える