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

combine GNU parallel with nested for loops and multiple variables

我在 destdir 中有 n 个文件夹。每个文件夹包含两个文件:*R1.fastq 和 *R2.fastq。使用此脚本,它将一个接一个地完成工作 (bowtie2),并在 destdir 中输出 {name of the sub folder}.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 并行工具来加快速度,你能帮忙吗?谢谢。

在最简单的情况下,您通常可以将 echo 放在命令的前面,然后将您本应顺序执行的命令列表发送到 GNU Parallel,以并行执行,像这样:

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

使用bash函数:

#!/bin/bash

my_bowtie() {
  mm9_index="/Users/bowtie2-2.2.6/indexes/mm9/mm9"
  destdir=/Users/Desktop/test/outdir/
  f=""
  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