将并行功能添加到FOR任务

时间:2015-03-28 17:36:14

标签: parallel-processing gnu-parallel

我想执行以下命令:

for i in {0-months,3-months,6-months,9-months,12-months,EC1,EC2_CZ,EC2,EC3}; do freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/${i}.vcf ${i}.sort.grp.bam; done

但这些任务是相互独立的,可以并行运行。我想知道是否有办法用gnu parallel做到这一点。

通常在使用parallel时,我会有一个文件列出运行所需的所有命令,在这种情况下它看起来像这样:

freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/0-months.vcf 0-months.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/3-months.vcf 3-months.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/6-months.vcf 6-months.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/9-months.vcf 9-months.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/12-months.vcf 12-months.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/EC1.vcf EC1.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/EC2_CZ.vcf EC2_CZ.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/EC2.vcf EC2.sort.grp.bam
freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/EC3.vcf EC3.sort.grp.bam

所以当文件准备好后,我可以简单地运行:

parallel -j 4 -a FILE freebayes

但是这需要将命令写入文件,然后调用并行,必须有一种更简单的方法。

这似乎有效:

parallel -j 4 -a \
<(for i in {0-months,3-months,6-months,9-months,12-months,EC1,EC2_CZ,EC2,EC3}; do echo "freebayes --fasta-reference ../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous --min-coverage 10 -F 0.01 -C 2 --vcf vcf/${i}.vcf ${i}.sort.grp.bam"; done)
freebayes

但它看起来很傻......任何更简单的方法都可以做到这一点? 谢谢!

1 个答案:

答案 0 :(得分:1)

我真的很困惑你是如何想出这种非常复杂(但有效)的方法来做到这一点:

parallel -j 4 freebayes --fasta-reference \
../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous \
--min-coverage 10 -F 0.01 -C 2 --vcf vcf/{}.vcf {}.sort.grp.bam \
::: 0-months 3-months 6-months 9-months 12-months EC1 EC2_CZ EC2 EC3

如果这些是vcf-dir中的所有vcf文件并且它是一个4核机器,你甚至可以这样做:

parallel freebayes --fasta-reference \
../Genome/ECIII_Lemming_assembly_masked.fasta --pooled-continuous \
--min-coverage 10 -F 0.01 -C 2 --vcf {} {/.}.sort.grp.bam \
::: vcf/*.vcf

你有没有完成教程? man parallel_tutorial

您是否观看了介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

您是否看过示例:LESS=+/EXAMPLE: man parallel

相关问题