bash - 如何解释这个'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
解决方案
以以下数据为例
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,但也支持旧的表示法。
希望这可以帮助!