我有一个用逗号分隔的数字文件。我只想按第2列对列表进行排序。我的期望是,行将仅按第二列而不是其他列进行排序。我不想按多个键进行排序。我知道如何按一个键排序。我在这里的问题是,为什么我要以起始POS和结束POS作为第2列,为什么还要对第3列进行排序?
文件
cat chris.num
1,5,2
1,4,3
1,4,1
1,7,2
1,7,1
排序后
sort -t',' -k2,2 chris.num
1,4,1
1,4,3
1,5,2
1,7,1
1,7,2
但是我的预期输出是
1,4,3
1,4,1
1,5,2
1,7,2
1,7,1
所以我想,因为我将开始键和结束键指定为-k2,2,所以它只会基于此列进行排序,但似乎也正在对其他列进行排序。我如何才能仅按第2列而不是按其他人
进行排序答案 0 :(得分:2)
根据sort
的POSIX描述:
除非指定了-u选项,否则应该比较相等的行应按顺序排序,就像没有选项-d,-f,-i,-n或-k一样(但-r仍在效果(如果已指定),并且行中的所有字节均对比较有效。未指定仍然比较相等的行的写入顺序。
因此,在您的情况下,当第二行中的两行具有相同的值,因此相等时,将比较整行以获得最终排序。
GNU sort
(可能还有其他实现,但不是POSIX要求的)为stable sort提供了-s
选项,其中具有比较相等的键的行与原来的样子,就是您想要的样子:
$ sort -t, -s -k2,2n chris.num
1,4,3
1,4,1
1,5,2
1,7,2
1,7,1