生信编程18.把文件内容按照染色体分开写出
有一些五六年前的学生们都成长为了各个生物信息学相关公司的小领导,而且他们都有了自己的公众号,知乎号,也算是一番人物。最近他们跟我反馈面试找不到或者说很难直接考核筛选到认真干活的生信工程师,挺有意思的。让我想起来了早在生信技能树论坛创立之初我为了引流,而规划的200个生信工程师面试题。值得继续分享:
这个需求很常见,因为一般生物信息数据都比较大,如sam,vcf,gtf,或者bed。有的时候需要用一些仅包含一个或者几个染色体的文件来进行分析,就需要进行拆分。
参照曾老师的perl版本http://www.biotrainee.com/thread-1329-1-1.html,我写了python版本的
首先使用一个较小的测试文件来进行拆分:
test.bed
chr2 43995310 43995986
chr17 49788603 49789067
chr17 59565573 59566163
chr19 8390308 8390745
chr12 49188033 49189033
chr7 974903 975570
chr7 98878532 98879500
chr7 44044672 44045322
chr1 153634052 153634772
chr11 60905850 60906575
python脚本如下:
#!/usr/bin/python
with open('test.bed','r') as f:
for line in f:
arr = line.strip().split(' ')
with open(arr[0]+'.txt','a') as f: #'a'表示不覆盖写入,w表示盖原来的文件写入
f.writelines(line)
结果文件如下:
-rw-rw-r-- 1 chxluo chxluo 29 Feb 22 13:04 chr11.txt
-rw-rw-r-- 1 chxluo chxluo 29 Feb 22 13:04 chr12.txt
-rw-rw-r-- 1 chxluo chxluo 58 Feb 22 13:04 chr17.txt
-rw-rw-r-- 1 chxluo chxluo 24 Feb 22 13:04 chr19.txt
-rw-rw-r-- 1 chxluo chxluo 30 Feb 22 13:04 chr1.txt
-rw-rw-r-- 1 chxluo chxluo 29 Feb 22 13:04 chr2.txt
-rw-rw-r-- 1 chxluo chxluo 81 Feb 22 13:04 chr7.txt
对bam文件进行分割
使用bamtools可以实现
bamtools split -in my.bam -reference