我有我认为应该是一个常见问题,但我还没有找到任何好的解决方案。
我有一个文件,其中每一行都有一个染色体编号、染色体中的起始位置和一些相关值,如下所示。
1 1.07299851019 1 1.07299851019 HQ chrY 2845223 + 0.251366120219 46
1 1.06860686763 1 1.06860686763 HQ chr10 88595309 + 0.256830601093 47
1 1.04688316093 3 3.14064948278 HQ chr6 49126474 + 0.295081967213 54
1 1.1563829915 1 1.1563829915 HQ chrX 16428176 + 0.185792349727 34
我想在染色体(第 6 列)和起始位置(第 7 列)上使用 unix 排序命令对这个文件进行排序。在四处寻找之后,我想出了这个,这让我非常接近:
nohup sort -t $'\t' -k 6.4,6.5n -k 7,7n
我无法解决的剩下的问题是,虽然用数字编号的染色体可以正常排序,但 X 和 Y 染色体在起始位置上被排序在一起,如下所示:
1 0.978579587641 9 8.80721628876 HQ chrX 2861057 - 0.431693989071 79
1 0.979500536702 1 0.979500536702 HQ chrY 2861314 - 0.420765027322 77
1 0.969979601694 9 8.72981641525 HQ chrX 2861649 - 0.469945355191 86
我知道可以通过用数字替换 chrX 和 chrY 来解决,或者编写一个程序来解决它,但是能够使用一个简单的命令会非常好,特别是因为文件大小通常很大而且我反复这样做。
如果染色体按 1 到 22 的顺序排列,然后是 X 和 Y。我的命令首先是 X 和 Y 染色体,然后是 1 到 22 号染色体。