将GNU parallel与嵌套for循环和多个变量结合起来

时间:2015-10-21 21:06:26

标签: bash loops parallel-processing bioinformatics fastq

我在destdir中有n个文件夹。每个文件夹包含两个文件:* R1.fastq和* R2.fastq。使用此脚本,它将逐个执行作业(bowtie2)并在destdir中输出{子文件夹的名称} .sam。

#!/bin/bash

mm9_index="/Users/bowtie2-2.2.6/indexes/mm9/mm9"
destdir=/Users/Desktop/test/outdir/

for f in $destdir/*
do
fbase=$(basename "$f")
echo "Sample $fbase"
bowtie2 -p 4 -x $mm9_index -X 2000 \
-1 "$f"/*R1.fastq \
-2 "$f"/*R2.fastq \
-S $destdir/${fbase}.sam
done

我想使用gnu并行工具加快速度,你能帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:2)

使用bash函数:

#!/bin/bash

my_bowtie() {
  mm9_index="/Users/bowtie2-2.2.6/indexes/mm9/mm9"
  destdir=/Users/Desktop/test/outdir/
  f="$1"
  fbase=$(basename "$f")
  echo "Sample $fbase"
  bowtie2 -p 4 -x $mm9_index -X 2000 \
  -1 "$f"/*R1.fastq \
  -2 "$f"/*R2.fastq \
  -S $destdir/${fbase}.sam
}
export -f my_bowtie
parallel my_bowtie ::: $destdir/*

有关详细信息:man parallelhttp://www.gnu.org/software/parallel/man.html#EXAMPLE:-Calling-Bash-functions

答案 1 :(得分:0)

最简单的说,通常只需将echo放在命令的前面,然后将顺序执行的命令列表发送到GNU Parallel,以便并行执行,如这样:

for f in ...; do
   echo bowtie2 -p 4 ....
done | parallel