首页 > 解决方案 > 如何解释这个'sort -k1,1n -k2,2n -k3,3n'命令

问题描述

我有一个关于如何解释以下排序命令行的问题,该命令行用于根据床文件的第 1 列(染色体)、第 2 列(起始位置)和第 3 列(结束位置)对床文件进行排序:

sort -k1,1n -k2,2n -k3,3n foo.bed

上面的命令不能按我想要的方式对第一列进行排序。为了回答响应者的问题,我附上了一些我测试过的命令和结果,我测试了以下文件(test.bed):

Ch2     50      100
Ch10    100     110
Ch11    110     120
Ch21    120     150
Ch21    20      80
Ch1     100     110
Ch1     50      100

以下两个命令行都不起作用

sort -k 1,1n test.bed
sort -k1,1n test.bed

两个结果都是:

Ch1 100 110
Ch1 50  100
Ch10    100 110
Ch11    110 120
Ch2 50  100
Ch21    120 150
Ch21    20  80 

只有以下命令按我想要的方式工作

sort -k1,1V test.bed

结果是:

Ch1 100 110
Ch1 50  100
Ch2 50  100
Ch10    100 110
Ch11    110 120
Ch21    120 150
Ch21    20  80

标签: bash

解决方案


以以下数据为例

62, 10, 3
6, 10, 37
62, 2, 72
55, 22, 5

如果我根据键 1(第一列)对数据进行排序,我观察到以下结果:

sort -k1

62, 10, 3
6, 10, 37
62, 2, 72
55, 22, 5

注意 62、6、62 和 55 的顺序。如果我想在 key1 的基础上进行数字排序,我可以这样做

sort -k1 -n
6, 10, 37
55, 22, 5
62, 10, 3 
62, 2, 72

注意,这里的数据是根据 key1 排序到行尾的。如果我想在key1的基础上进行数字排序,那么key2;我可以

sort -k1,1n -k2,2n
6, 10, 37
55, 22, 5
62, 2, 72
62, 10, 3 <== The position of this row has changed, 
              because when data of first row was same,
              sorting is done on the basis of 2nd column.

按人排序:

 -k field1[,field2], --key=field1[,field2]
         Define a restricted sort key that has the starting position field1, and optional ending position field2 of a key field. 

-k 选项可以指定多次,在这种情况下,当前面的键比较相等时,比较后续的键。-k 选项替换了过时的选项 +pos1 和 -pos2,但也支持旧的表示法。

希望这可以帮助!


推荐阅读