我需要帮助修复我的脚本以自动执行多个文件转换。
我正在服务器上工作,并试图找到一种自动转换文件的方法。
转换需要通过四种格式进行: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
感谢大家的帮助。我已经完善了我的脚本,使其能够与多线程配合使用。感谢大家的帮助。