如何在管道中将 BAM 转换为 FASTQ 以进行分析,然后删除生成的 fastq?

How do I convert BAM to FASTQ in pipe to analyze and then remove the fastq generated?

抱歉这个问题,但我是一名没有太多编程经验的生物信息学家,我不知道如何解决它。

我在服务器目录中有几个 bam 文件。我想用 grep 计算 bam 和相应的 fastq 文件中出现的次数,但是由于缺少 space,我还需要在分析后删除每个 fastq 文件。

为了计算 BAM 中出现的次数,我尝试了这个(但欢迎任何建议):

for i in *bam* ; do
    echo $i >> TELO_BAM
    grep 'TTAGGG' $i |
    wc -l >> TELO_BAM 
done

如您所见,我还想将文件名和计数放在 txt 文件中。

现在,为了计算 fastq 中的数字,我尝试了这个,但我不知道如何在完成计数后立即删除 fastq(所以它不会占用 space):

for i in *bam*; do
    samtools bam2fq $i >> $i\.fq |
    echo $i >> TELO_FQ
    grep 'TTAGGG' $i >> TELO_FQ
done

我不知道它是否有效,但我想将 bam 转换为 fastq,将文件名放入文本文件中,计算 fastq 中出现的次数,然后将其删除并转到下一个文件.

  • grep XXX | wc -l 给出包含 XXX 的行数,而不是出现的次数(除非每行最多包含一次)。
    使用 GNU grep -o XXX | wc -l 你将能够计算出现的总数。

  • 在循环中使用>> TELO_XXX是sub-optimal,最好使用文件描述符。

  • 你将FastQ文件命名为$i.fq,所以你只需要rm "$i.fq"在使用它之后就可以了。不需要创建任何FastQ文件; samtools bam2fq 将其输出写入标准输出,因此您可以直接 grep 它。

这是一个未经测试的代码来说明这一切:

exec 3> TELO_BAM || exit 1
exec 4> TELO_FQ  || exit 1

for bam in *bam*
do
    printf '%s: ' "$bam" 1>&3
    grep -o 'TTAGGG' "$bam" | wc -l 1>&3

    printf '%s: ' "$bam.fq" 1>&4
    samtools bam2fq "$bam" | grep -o 'TTAGGG' | wc -l 1>&4
done