我想按第二列对下面的文件进行排序,从第 7 个位置到第 9 个位置。
$ cat sample.bed
chr1 248956422 chr1:248956422
chr2 242193529 chr2:242193529
chr3 198295559 chr3:198295559
chr4 190214555 chr4:190214555
chr5 181538259 chr5:181538259
chr6 170805979 chr6:170805979
chr7 159345973 chr7:159345973
chrX 156040895 chrX:156040895
chr8 145138636 chr8:145138636
chr9 138394717 chr9:138394717
Run Code Online (Sandbox Code Playgroud)
我使用如图所示的排序并得到以下输出:
$ sort -n -k2.7,2.9 sample.bed
chr4 190214555 chr4:190214555
chr6 170805979 chr6:170805979
chr5 181538259 chr5:181538259
chr2 242193529 chr2:242193529
chr8 145138636 chr8:145138636
chrX 156040895 chrX:156040895
chr3 198295559 chr3:198295559
chr9 138394717 chr9:138394717
chr1 248956422 chr1:248956422
chr7 159345973 chr7:159345973
Run Code Online (Sandbox Code Playgroud)
排序更改行顺序,但不基于我的参数。请注意,sort -k2,2 按预期工作:
$ sort -k2,2 sample.bed
chr9 138394717 chr9:138394717
chr8 145138636 chr8:145138636
chrX 156040895 chrX:156040895
chr7 159345973 chr7:159345973
chr6 170805979 chr6:170805979
chr5 181538259 chr5:181538259
chr4 190214555 chr4:190214555
chr3 198295559 chr3:198295559
chr2 242193529 chr2:242193529
chr1 248956422 chr1:248956422
Run Code Online (Sandbox Code Playgroud)
我一定错过了一些明显的东西......任何帮助将不胜感激。
的输出信息sort --debug非常丰富:
# sort -n -k2.7,2.9 --debug
...
chr4 190214555 chr4:190214555
___
______________________________________
...
Run Code Online (Sandbox Code Playgroud)
它021从第一chr4行开始比较,因为它将前导空格算作属于该字段。你可以:
sort -n -k2.11,2.13
Run Code Online (Sandbox Code Playgroud)
或忽略前导空格-b:
sort -b -n -k2.7,2.9
Run Code Online (Sandbox Code Playgroud)