如何用samtools批量将目录下的.bam文件转换为.fastq文件?
批量用samtools将目录下所有.bam文件转换为.fastq文件
单端BAM文件批量转换
用bash基础循环就能搞定,直接遍历当前目录下所有.bam文件,自动替换后缀生成对应的.fastq:
for bam_file in *.bam; do samtools fastq "$bam_file" > "${bam_file%.bam}.fastq" done
*.bam:匹配当前目录下所有后缀为.bam的文件"$bam_file":带引号避免文件名含空格时出错${bam_file%.bam}:去掉文件名的.bam后缀,比如sample1.bam会变成sample1,再加上.fastq就是目标文件名
双端BAM文件批量拆分
如果是双端测序的BAM文件,可以用samtools fastq的-1和-2参数直接拆分生成R1和R2两个fastq文件:
for bam_file in *.bam; do samtools fastq -1 "${bam_file%.bam}_R1.fastq" -2 "${bam_file%.bam}_R2.fastq" "$bam_file" done
执行后会生成类似sample1_R1.fastq和sample1_R2.fastq的成对文件
并行加速转换(适合大量文件)
如果目录下BAM文件很多,想用多线程加速,可结合xargs实现并行处理:
ls *.bam | xargs -n1 -P4 sh -c 'samtools fastq "$1" > "${1%.bam}.fastq"' _
-n1:每个进程处理1个文件-P4:启动4个并行进程,可根据你的CPU核心数调整数字(比如-P8用8线程)
内容的提问来源于stack exchange,提问作者iiaawaak
相关产品推荐
相关产品推荐

