Sort

為什麼排序會改變具有相同排序鍵的行的順序?

  • October 12, 2020

這是數據:

D 2
B 2
A 2

當我執行這個命令時:

sort -k2,2 file

它輸出:

A 2
B 2
D 2

我的問題是,當我只指定第二列-k2,2時,為什麼它也按第一列排序?由於第二列的所有值都相同,因此應該保持原樣。

這是最後的比較。比較兩行時,如果所有鍵比較相等,則作為最後的手段,將執行整行的基本字元串比較(-r仍然適用,但不適用於其他選項)。該行為由POSIX指定:

除非指定了 -u 選項,否則比較相等的行應被排序,就好像沒有選項 -d、-f、-i、-n 或 -k 存在一樣(但 -r 仍然有效,如果它已被指定)並且行中的所有字節對比較都很重要。未指定仍然比較相等的行的寫入順序。

使用 GNU sort,可以使用-s/ --stable¹ 選項禁用最後的比較。


¹ 因為 GNU 使用的排序算法sort在其他方面是穩定的,所以禁用最後的比較會導致穩定的排序。.

引用自:https://unix.stackexchange.com/questions/64102