我在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并行工具加快速度,你能帮忙吗?谢谢。
答案 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 parallel
或http://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