如何解释此“ sort -k1,1n -k2,2n -k3,3n”命令

时间:2019-12-16 05:16:03

标签: bash

我对如何解释以下排序命令行有疑问,该命令行用于根据床文件的第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

2 个答案:

答案 0 :(得分:1)

以以下数据为例

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,但是旧的表示法是   也受支持。

希望这会有所帮助!

答案 1 :(得分:0)

在手册页中:

  

-k,--key = KEYDEF
  通过键排序; KEYDEF给出位置和类型

还有(强调我的意思):

  

KEYDEF对于开始位置和停止位置是F [.C] [OPTS] [,F [.C] [OPTS]],   其中 F是字段编号,C是字段中的字符位置;   两者都是原点1,并且停止位置默认为行的结尾。   如果-t和-b均无效,则计算字段中的字符   从前面的空白开始。 OPTS是一个或多个   单字母排序选项[bdfgiMhnRrV],该选项覆盖全局   该键的订购选项。如果没有给出密钥,则使用整个密钥   行是关键。使用--debug诊断不正确的密钥用法。

还有:

  

-n,--numeric-sort   根据字符串数值比较

因此,-k1,1n的意思是“仅按字段1排序(不继续到行尾),并对该字段使用数字比较”。只有-k1会将整个字符串从该字段带到行尾;当您想进行数字排序时,这是不希望的。