美文网首页
生信(一)对BED文件进行排序

生信(一)对BED文件进行排序

作者: 生信了 | 来源:发表于2019-11-21 14:03 被阅读0次

原创:hxj7

关键词:bed; sort; cmp; key; alpha-numeric

问题
在处理NGS数据时,经常要对BED文件进行排序。比如BED文件长这样,分隔符是’\t’:

image
我们想按照如下规则进行排序:
  1. 第一列按照染色体编号进行排序,排序后应该是chr1, chr2, chr4, chr5, chr10, chr20, chrX。
  2. 第二列和第三列按照数字序进行排序。

第一个子问题
首先,我们先来看看如何对第二列进行排序。
刚接触GNU sort命令的同学可能都写出过类似下面的命令:

image
并且期待结果会是
image
但是实际上的结果是
image
为什么?这是因为sort默认按照字典排序规则对字符串进行排序。比如,字符串”10”的第一个字母是”1”,比字符串”2”的第一个字母”2”小,所以字符串”10”小于字符串”2”。我们要想按照数值大小进行排序,正确的做法是要给sort加上”-n”选项。 image
这样就会得到预期的结果了。

第二个子问题
如何对染色体编号进行排序呢?用上面的”-n”选项可以吗?
如果我们给出这样的命令:

image
答案会是:
image
很显然这个结果是不对的。虽然加了”-n”选项,但是由于染色体编号都是”chr”开头的,所以sort命令仍然将”chr”后面的数字视作字符串,按照字典排序规则进行排序。
正确的做法是使用”-V”选项。
image
将会得到正确答案:
image
最初的问题
有了两个子问题的答案,让我们回到文章开始的问题:如何对BED文件进行排序?我们给出如下命令:
image
其中-k选项是指定第几列。
这样的话文章开头提到的那个BED示例文件经过排序后就会变成
image
Python版本
这里我们也分享一种Python对BED文件进行排序的方法。简单起见,假设我们只对BED文件的第一列(染色体编号)进行排序。代码如下:
image
上面的代码其实只是利用了Python中的sorted函数,该函数原型是:
image
其中:
(图片来源:http://www.runoob.com/python/python-func-sorted.html)

并且值得注意的是,上面的代码使用了x.partition(‘\t’)而非x.split(‘\t’)。当只需要解析字符串的第一个“字段”的时候,partition()函数的效率比split()的效率高,因为它不会解析剩余的“字段”。

如果有任何问题欢迎交流!

(公众号:生信了)


image

相关文章

  • 生信(一)对BED文件进行排序

    原创:hxj7 关键词:bed; sort; cmp; key; alpha-numeric 问题在处理NGS数据...

  • gtf文件转化为bed12

    bed文件的定义:【生信】数据格式:bed12格式详解 - 简书 (jianshu.com)[https://ww...

  • read depth per BED region with B

    输入按坐标排序过的bam比对结果文件和bed区间信息文件,统计bed文件中,目标区间内比对结果的深度信息。 关于S...

  • sort命令说明

    对一组文件进行排序 对数字进行排序 按逆序进行排序 按月份排序 5.测试一个文件是否已经排序过。 依据键或列进行排...

  • 【生信】数据格式:bed12格式详解

    BED(Browser Extensible Data)格式提供了展示生信数据的有效方法。以往对bed格式的介绍较...

  • 测序深度分布图及代码(shell和R)

    微信公众号:生物信息学习 有一个bed文件,想要知道这个bed文件对应的测序深度的分布,bed文件如下图所示: 用...

  • 外部排序

    外部排序 假设文件需要分成k块读入,需要从小到大进行排序。(1)依次读入每个文件块,在内存中对当前文件块进行排序(...

  • 数据结构与算法外部排序

    1.外部排序的基本概念对大文件进行排序,因为文件中的记录很多、信息量庞大,无法将整个文件复制进内存中进行排序需要将...

  • bedtools intersect 的八个常用案例

    摘自“生信技能树”的《bedtools用法大全》 用来求两个BED或者BAM文件中的overlap,overlap...

  • 使用二分查找进行bed区域过滤

    一、背景 有的时候,我们需要手动对结果文件(可能是vcf,xls,或者其他形式)进行bed文件的过滤,这时候如何高...

网友评论

      本文标题:生信(一)对BED文件进行排序

      本文链接:https://www.haomeiwen.com/subject/enazictx.html