sort --unique -k 是否按原始顺序删除重复项?

tas*_*ket 2 sort merge indexing

我正在对一组连接的索引文件进行唯一排序,其中第一列有时会在每个索引之间发生变化,而第二列将是一个键值(实际上是十六进制地址)。每个 indexN 文件迭代都会记录自上次以来更改的地址——如果地址 0xaa11 存在于 index3 中,则在合并+排序的输出中,它应该替换来自 index1 和 index2 的 0xaa11 地址引用。

问题是,如果我只是按特定顺序将每个源索引通过管道传输,我能否使用像 GNU这样的工具可靠地进行这种类型的合并?sortsort -u

例如,管道索引从新到旧:

cat index3 index2 index1 | sort -u -k 2,2
Run Code Online (Sandbox Code Playgroud)

当我对此进行测试时,它似乎确实保留了 index3 中包含也出现在 index2 和 index1 中的地址的行,同时删除了来自 index2 和 index1 的重复引用。

但情况会一直如此吗?该sort手册页是模糊的这个问题:

-u --unique   output only the first of an equal run
Run Code Online (Sandbox Code Playgroud)

我对 GNU sort 的算法知之甚少,无法预测具有匹配键的行是否总是按照源文件连接的相同顺序进行排序(例如,它们在源流中出现的顺序)。但我知道排序算法并不总是以线性方式工作。这就是为什么我要澄清文档似乎暗示的内容。

Ulr*_*arz 6

sort不保证出于其目的而相等的行的顺序,除非您使用-sswitch明确请求(--stable:通过禁用最后的比较来稳定排序)——稳定排序算法是一种不会改变相等项的原始顺序的算法.

但是,信息页面通知我们-u“也禁用了默认的最后手段比较”,所以是的,您应该没问题,但从联机帮助页中完全不明显。