我正在对一组连接的索引文件进行唯一排序,其中第一列有时会在每个索引之间更改,第二列将是键值(实际上是十六进制地址)。每个 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 排序的算法知之甚少,无法预测具有匹配键的行是否总是按其源文件连接的相同顺序排序(例如,它们出现在源流中的顺序)。但我确实知道排序算法并不总是以线性方式工作。这就是为什么我正在寻找澄清文档似乎暗示的内容。