Bash 按列中的字符位置排序

标签 bash sorting

我想按第二列对下面的文件进行排序,从第 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
          ___
______________________________________
...

它比较第一 chr4 行中的 021,因为它将前导空格算作属于该字段。您可以:

sort -n -k2.11,2.13

或使用-b忽略前导空格:

sort -b -n -k2.7,2.9

关于Bash 按列中的字符位置排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59830666/

相关文章:

bash - 无法使用 Cron 删除文件

python - 排序技术 Python

javascript - 对包含数字的 JavaScript 字符串数组进行排序

python - Quichesort 的好处

bash - 在 Emacs 中的脚本中着色/缩进脚本

linux - 如何在 block 内写入确切的字符串而不是执行它们?在 Bash 中使用 << EOF 时?

git - 如何在 git 别名中使用 bash 函数?

android - 使用 Android 应用程序运行脚本

javascript - 使用两个数组排序

java - 将对象列表排序到特定成员/状态