實用程式“排序”如何運作? (為什麼它不能按照我認為應該的方式工作?)

實用程式“排序”如何運作? (為什麼它不能按照我認為應該的方式工作?)

我有 2 個文字檔:

$ 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或其他實用程式可以用來取得我想要的排序順序?

答案1

您需要變更排序規則區域設定。您所描述的行為對於en_US許多其他語言環境來說是典型的。修復:

LC_ALL=C   sort  /tmp/test1

更多內容在這個答案中:https://stackoverflow.com/questions/6531674/linux-sort-unexpected-output

答案2

也許它只查看字母字元?因此,下A一個字母字元是bfrom bar。

相關內容