为FOR任务添加并行功能



我想执行以下命令:

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并行实现这一点。

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

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

但这看起来很傻。。。有什么更简单的方法吗?谢谢

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

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目录中的所有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

最新更新