Sort
sort –unique -k 是否按原始順序刪除重複項?
我正在對一組連接的索引文件進行唯一排序,其中第一列有時會在每個索引之間更改,第二列將是鍵值(實際上是十六進制地址)。每個 indexN 文件迭代記錄自上一次以來更改的地址——如果地址 0xaa11 存在於 index3 中,則在合併+排序的輸出中,它應該替換來自 index1 和 index2 的 0xaa11 地址引用。
問題是,如果我只是按特定順序將每個源索引通過管道傳輸到諸如 GNU 之類的工具,我能否可靠地進行這種類型的合併?
sort``sort -u
例如,管道索引從最新到最舊:
cat index3 index2 index1 | sort -u -k 2,2
當我對此進行測試時,它似乎保留了 index3 中包含也出現在 index2 和 index1 中的地址的行,同時刪除了來自 index2 和 index1 的那些重複引用。
但情況會一直如此嗎?手冊頁對此
sort
含糊不清:-u --unique output only the first of an equal run
我對 GNU sort 的算法知之甚少,無法預測具有匹配鍵的行是否總是按其源文件連接的相同順序排序(例如,它們出現在源流中的順序)。但我確實知道排序算法並不總是以線性方式工作。這就是為什麼我正在尋找澄清文件似乎暗示的內容。
sort
不保證行的順序就其目的而言是相等的,除非您使用-s
開關明確要求這一點(--stable
: 通過禁用最後的比較來穩定排序)——穩定的排序算法是一種不會改變相等項目的原始順序的算法.但是,資訊頁面告訴我們
-u
“也禁用了預設的最後手段比較”,所以是的,你應該沒問題,但從手冊頁上看完全不明顯。