Unix仅按单列排序

时间:2019-08-08 17:19:09

标签: linux sorting

我有一个用逗号分隔的数字文件。我只想按第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列而不是按其他人

进行排序

1 个答案:

答案 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