向 FOR 任务添加并行功能
Adding parallel capabilities to a FOR task
我要执行以下命令:
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 来做到这一点。
通常在使用并行时,我会有一个文件列出 运行 所需的所有命令,在这种情况下它看起来像这样:
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-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
我要执行以下命令:
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 来做到这一点。
通常在使用并行时,我会有一个文件列出 运行 所需的所有命令,在这种情况下它看起来像这样:
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-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