2015-11-05 80 views
3

我有2個文本文件:linux實用工具「sort」如何工作? (爲什麼它不工作,我認爲它應該的方式?)

$ cat /tmp/test1 
"AAP" bar 
"AEM" bar 
"AA" bar 
"AEO" bar 
"A" bar 

$ cat /tmp/test2 
"AEM" foo 
"AAP" foo 
"A" foo 
"AEO" foo 
"AA" foo 

我想對它們進行排序

$ sort /tmp/test1 
"AA" bar 
"AAP" bar 
"A" bar    <-- "A" is in position 3 
"AEM" bar 
"AEO" bar 

$ sort /tmp/test2 
"AA" foo 
"AAP" foo 
"AEM" foo 
"AEO" foo 
"A" foo    <-- "A" is in position 5 

爲什麼"A"最終在位置3在/tmp/test1位置5在/tmp/test2

我的期望是每個字符每列將進行比較。因此,當比較列3時,'A','E''"'將相互比較,並且這將是該測試數據的最終排序順序中的最終決定因素。

顯然我的期望是錯的,那麼sort如果不符合我的預期,將如何工作?

是否有命令行選項sort或我可以用來獲得我想要的排序順序?

+2

http://unix.stackexchange.com/ – Celeo

+1

我投票結束這個問題作爲題外話,因爲它屬於unix.stackexchange.com – andrewtweber

+0

相關:http://stackoverflow.com/questions/25835561/如何燦的Perl和UNIX的排序順序支持unicode字符串,在最相同的序列 – ninjalj

回答

5

默認情況下sort將工作在整條線上,並以特定於語言環境的方式執行此操作,某些語言環境會忽略某些字符(您的情況中的引號和空格)。要弄清楚發生了什麼,請嘗試--debug選項。 I.E.比較和對比:

sort --debug /tmp/test[12] 
LC_ALL=C sort --debug /tmp/test[12] 
sort --debug -k1,1 /tmp/test[12] 
LC_ALL=C sort --debug -k1,1 /tmp/test[12] 

順便說一句,你可以添加一個-s選項,以避免不得已排序簡化--debug輸出。

相關問題