アレイジョブについての覚え書き
パラメータを変えて繰り返し実行するのに使え、SGE/UGEの処理の負担を軽くする。
繰り返したいパラメータは配列の中に格納して回す。例えば、あるディレクトリの中にある全ファイルについて(for文を回したりせずに一個ずつ)プログラムを実行する場合の例は以下の通り。
-tオプションは、アレイジョブであることを示す。
-t [SGE_TASK_FIRST]-[SGE_TASK_LAST]:[SGE_TASK_STEPSIZE]
で指定する。
-t 1-20:1というオプションは、20回分のジョブを、1step sizeで実行する、ことを示す。-t 3-20:1の場合、ジョブ3からジョブ20までを実行する。
あるディレクトリの下にある、fastaファイル名と、ファイル数を表示させる。
count_files.sh
#! /bin/sh
#$ -S /bin/sh
#$ -t 1-4:1 ## qsub -t 1-4:1 count_files.sh でも良いが、ここでも記述可能
echo SGE_TASK_ID:$SGE_TASK_ID
echo SGE_TASK_FIRST:$SGE_TASK_FIRST
echo SGE_TASK_LAST:$SGE_TASK_LAST
echo SGE_TASK_STEPSIZE:$SGE_TASK_STEPSIZE
dir="/home/fasta/"
files=(`ls -1 ${dir}.fa`)
for f in ${files[*]}
do
echo $f
done
echo "Number of files: ${#files[*]}"
qsub 1-4:1 count_files.sh
count_files.sh.o***.1 # タスク1のoutputファイルの中身
SGE_TASK_ID:1
SGE_TASK_FIRST:1
SGE_TASK_LAST:4
SGE_TASK_STEPSIZE:1
***.fa
***.fa
***.fa
....
Number of files: 20
このスクリプトでは、配列にlsで取得したファイル名を格納している。TASK_IDを配列のインデックスとする場合には、配列は0から始まるが、TASK_IDは1以上でないと受け付けないので、インデックスの対応づけに注意する必要がある。例えば、bowtieを配列内の最初の4ファイルにかけたい場合には、以下のようにする。
#! /bin/sh
#$ -S /bin/sh
#$ -t 1-4:1
dir="/home/fasta/"
files=(`ls -1 ${dir}.fa`)
↓input file(fasta) ↓output
bowtie -f $tarseq ${files[$SGE_TASK_ID-1]} ${files[$SGE_TASK_ID-1]/.fa/.bwtres]