我对如何解释以下排序命令行有疑问,该命令行用于根据床文件的第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
答案 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
会将整个字符串从该字段带到行尾;当您想进行数字排序时,这是不希望的。