这是第二篇踩坑日记,这个系列用来记录在 Python 和 R 学习过程中遇到的问题和结果。今天介绍的是
将bam文件转换为fastq文件
使用的一些工具和工具使用过程中发现的问题。希望可以帮助到大家,也希望大家可以给出建议,欢迎留言交流。
在写宏基因组分析流程的过程中,去宿主后需要将bam文件转换为fastq文件,以便进行后续的分析。但是在在使用一些生信主流工具进行文件格式转换过程中,发现了一些问题,分享出来解决办法(更确切地说是绕过这些问题),和大家相互学习讨论。
bedtools
在尝试过程中,先使用了bedtools,bedtools工具中的bamtofastq命令进行 bam 文件转换为 fastq 文件,可以对单端比对的生成的 bam 和双端比对生成的 bam 进行转换,详细使用方法和参数见bamtofastq 官方文档
双端:
samtools sort -n -o aln.qsort.bam aln.bam
bedtools bamtofastq -i aln.qsort.bam -fq aln.end1.fq -fq2 aln.end2.fq
单端:
bedtools bamtofastq -i aln.bam -fq aln.fq
坑呢,就出现在这个地方。在使用bedtools bamtofastq
工具进行单端比对的 bam2fastq 过程中, 输出的 fastq 文件会两次输出同一条序列,导致转换后的 fastq 序列数是实际的两倍。具体原因查了好久都没有查到,而且没有可选的参数(希望有牛掰的大佬可以帮忙解释一下这是啥原因形成的)。

(上图中,图一为 bam 文件,图二为转换后的 fastq 文件)
bedtools bamtofastq 可选参数:

命令行
刚开始没有发现用 samtools 将单端比对的 bam 文件转换为 fastq 的方法,就写了一条 linux 命令解决上面的问题。
samtools view in_pos.bam | egrep -v '^@' | awk '{if($3 == "*") print "@"$1"\n"$10"\n" "+" "\n"$11}' > single.fq
samtools 工具
samtools工具使用fastq命令进行 bam 文件转换为 fastq 文件,并且可以将单端比对、双端比对的 bam 文件转换为 fastq 文件,使用方法和参数见samtools-fasta 官方文档
双端
# 通过samtools collate 或 samtools sort -n 命令对bam文件排序
samtools collate -u -O in_pos.bam | samtools fastq -1 paired1.fq -2 paired2.fq -0 /dev/null -s /dev/null -n
#若bam文件已经排过序
samtools fastq in_pos.bam -1 paired1.fq -2 paired2.fq -0 /dev/null -s /dev/null -n
单端
samtools fastq in_pos.bam > single.fq
单端情况下只能进行重定向输出,在查找的过程中没有找到有教程写这个方法,不清楚是因为大家没有单端比对的 bam2fastq 需求,还是说这种方法有缺陷。
samtools fastq 可选参数:

好了,今天的踩坑日记就到这里了,其它实现 bam2fastq 工具(例如:Picard、GATK、Biopython)没有做过尝试,大家尝试一下发现的坑,可以留言交流一下。

本文由 mdnice 多平台发布