sort 有个参数-k,可以指定字段,有比较复杂的语法,不在文本范围内。
一下为一段数据(从基因中得到,仅仅作为demo),文件名为 data
- chr13 3008566 3008677
- chr9 3024384 3024515
- chr19 3157071 3157172
- chr5 3236386 3236476
- chr13 3041044 3041191
- chr12 3045343 3045532
- chr6 3087308 3087625
- chr5 3109870 3110091
- chr9 3115454 3115531
字段中间以空格分开
现在想首先按照染色体进行排序,然后相同的染色体上的基因按起始位点进行排序,
那么这就是一个多字段的排序,而且第二个字段为数字,使用sort命令如下
- sort -t ' ' -k1,1 -k2n,2 data
其中 -t ' ' 指定使用空格分列
-k1,1 指定以第一列为关键字排序
-k2n,2 指定以第二列为关键字做数据排序
也可以使用
- sort +0 -1 +1n -2
效果是一样的。
排序结果
- chr12 3045343 3045532
- chr13 3008566 3008677
- chr13 3041044 3041191
- chr19 3157071 3157172
- chr5 3109870 3110091
- chr5 3236386 3236476
- chr6 3087308 3087625
- chr9 3024384 3024515
- chr9 3115454 3115531