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 回答