bash - Bash 按列中的字符位置排序
问题描述
我想按第 2 列对以下文件进行排序,从第 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
如图所示,我使用排序并获得以下输出:
$ 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
排序更改行顺序,但不是基于我的参数。请注意, 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
我必须遗漏一些明显的东西......任何帮助将不胜感激。
解决方案
的输出sort --debug
非常有用:
# sort -n -k2.7,2.9 --debug
...
chr4 190214555 chr4:190214555
___
______________________________________
...
它021
从第一chr4
行开始比较,因为它将前导空白视为属于该字段。你可以:
sort -n -k2.11,2.13
或忽略前导空格-b
:
sort -b -n -k2.7,2.9
推荐阅读
- sql - SQL:左连接 vs CASE 子查询——效率更高
- html - 将 Displacy Entity Recognition Visualization 渲染为 Plotly Dash
- java - 如何将位图转换为字节数组android?
- r - 在plotly中将箭头段添加到散点图中
- java - 无法读取 packageName - Android Studio
- node.js - Sublime 文本找不到 Node.js。如何帮助 Sublime 正确找到 Node?
- python - 带有 base10 的 int() 的文字无效
- mysql - 如何在 gnu make makefile 中转义反引号
- javascript - 在javascript中使用child_process执行shell命令
- javascript - 续集创建 2 个条目而不是 1 个