自动进行多个文件转换

自动进行多个文件转换

我需要帮助修复我的脚本以自动执行多个文件转换。
我正在服务器上工作,并试图找到一种自动转换文件的方法。

转换需要通过四种格式进行:sam、bwa、bcf 和 vcf
文件在两个位置增加,如下所示。每个增量都有两种文件格式:.sai 和 .fastq

004_001
004_002
004_003
004_004

然后 

005_001
005_002
005_003
005_004

我努力了:

代码:

for i in {1..4}
do 
    $bwa samse $hg19 $csai $cfas > *.sam
done 

但它只对_001文件进行了四次操作。
我尝试将结束增量设置为 i,这样_001它就不会_00$((i))变成 1、2、3、4,但它仍停留在 1。

sam 转换示例:

for i in {1..4}
do 
./bwa samse  /hg19.fa  *_00$((i)).sai *_00$((i)).fastq  > *_00$((i)).sam
done

我编写它是为了运行具有该名称的输入文件并将数据输出到 sam 文件。它可以工作,但它转换了_001四次而_001不是_004

基本上我需要编写一个脚本来自动执行多个文件转换

  • 3 个文件输入 > 输出 1 个文件 .sam
  • 输入 .sam 文件 > 输出 .bam 文件
  • 输入 .bam 文件 > 输出 .bcf 文件
  • 输入 .bcf 文件 > 输出 .vcf 文件

答案1

那么命令的语法可以帮助你

bwa samse [-n max_occ] [-f out.sam] [-r RG_line] <prefix> <in.sai> <in.fq>

现在让我们看看你的 bash:

for j in {004,005}; do
    for i in {001..004}; do
        bwa samse -f $j_$i.sam $hg19 $j_$i.sai $j_$i.fastq

        # Do the other conversions from $j_$i.sam
        samtools view -bS $j_$i.sam > $j_$i.bam
        samtools mpileup -uf genome.fa $j_$i.bam | bcftools view -bvcg - > $j_$i.bcf 
    done
done

我不知道$hg19是什么。
它期望那里有一个“前缀”,所以如果你知道它的意思,就把它代入进去。

无论如何,这应该会生成 8× .sam 文件。您可以更改上面的循环,以便在使用 生成 .sam 后bwa,执行其他转换,如下所示:

for j in {004,005}; do
    for i in {001..004}; do
        bwa samse -f $j_$i.sam $hg19 $j_$i.sai $j_$i.fastq

        # Do the other conversions from $j_$i.sam
        samtools view -bS $j_$i.sam > $j_$i.bam
        samtools mpileup -uf genome.fa $j_$i.bam | bcftools view -bvcg - > $j_$i.bcf
        # ... whatever is needed to convert bcf to vcf  ...
    done
done

或者您可以进行单独的循环:for f in *.sam; do command $f ...; done

答案2

我不会为递增计数器烦恼,你不需要它,它只会让事情变得复杂。试试这个:

for file in 0*.sai; do 
    bwa samse hg19.fa $file ${file%.sai}.fastq  > ${file%.sai}.sam
done

解释

  • for file in 0*.sai;:遍历0*.sai当前目录中的所有文件。
  • ${file%.sai}.sai从 的末尾删除$file。这意味着,如果file=001_001.sai${file%.sai}.fastq将是001_001.fastq

这样,您将遍历所有文件并正确运行转换,而无需摆弄计数器。我不知道您会使用什么命令来转换为其他格式,因为我从未处理过 NGS 数据,但您可以将所需的任何内容添加到循环中:

for file in 0*.sai; do 
    bwa samse hg19.fa $file ${file%.sai}.fastq  > ${file%.sai}.sam
    command2 $file ${file%.sai}.fastq  > ${file%.sai}.bwa, 
    command2 $file ${file%.sai}.fastq  > ${file%.sai}.bcf 
    command2 $file ${file%.sai}.fastq  > ${file%.sai}.vcf 
done

答案3

感谢大家的帮助。我已经完善了我的脚本,使其能够与多线程配合使用。感谢大家的帮助。

相关内容