2014-02-18 133 views
0

我一直使用Linux的問題排序時,我喜歡這種輸入運行:Linux的排序順序錯誤

07TLF\1\1\10040 
07TLF\1\1\10060 
07TLF03\10060 
07TLF03\10080 
07TLF\1\1\10320 
07TLF\1\1\10360 
07TLFS\10280 

(\ 1是按Ctrl +字符)。正如你所看到的第三和第四排是錯誤的(應該是第五和第六)。 如果我使用LC_COLLATE = C,一切順利!但在其他類似情況下,即使使用不同的LC_COLLATE,排序也可以正常工作。

我在C程序中使用排序,使用系統系統調用,但也運行在bash我有相同的行爲。

你能幫我嗎? THX

回答

0

從排序(1)的手冊頁:

NAME 
     sort - sort lines of text files 

我不認爲,按Ctrl + A是所謂的 「文本文件」 的任何文件的一部分。如果您有特殊要求 - 如對特殊字符進行排序 - 則必須使用滿足要求的實用程序,或者如果不存在此類實用程序,請自行實施。

由於不存在特殊字符的「自然順序」,因此您將會執行定義您想要的順序是什麼。如果任何語言環境都不符合您的要求,您可以將語言環境設置爲根據在那裏定義的規則進行排序,或者必須實施自己的排序算法。

順便說一句:如果可以避免的話,使用系統根本不是一個好主意。您可能永遠都不知道目標系統上安裝了哪種排序版本以及使用了哪些規則。