2012-08-13 66 views
0

不一致的答案我使用排序按照字母順序排列的文件的行排序,但我得到了一些奇怪的結果。 我認爲這是使用字符的十進制代碼對它們進行排序,但看起來不像。即'E'(十進制碼69)在'e'(十進制碼101)之後,'0'(碼48)在':'之後(碼58)。
我試圖用與sort命令

if [[ "E" < "e" ]]; then echo "true"; else echo "false"; fi 

if [[ "0" < ":" ]]; then echo "true"; else echo "false"; fi 

檢查,如果它給了我正確的答案,但事實並非如此。 我正在使用Ubuntu 12.04,並且我的環境和我正在嘗試排序的文件的編碼被定義爲en_us.UTF-8。

問題是,我必須解析java程序中的這些文件,假設這些行按字母順序排序。所以,當java根據字符的十進制代碼比較字符串時,我的解析失敗,因爲文件中的行不按照相同的順序排序。

有人可以幫我解決這個問題,或者迫使排序使用十進制代碼,要麼使用另一種方法來按照這個順序對文件進行排序。

非常感謝您的任何幫助。

回答

2

警告在手冊中。

*** WARNING *** The locale specified by the environment affects sort 
    order. Set LC_ALL=C to get the traditional sort order that uses native 
    byte values. 

嘗試這種情況:

$ LC_ALL=C sort input.txt 
0 
: 
E 
e 

$是殼提示)