如何在SGE上执行阵列作业 -

时间:2012-03-05 12:13:29

标签: arrays bash sungridengine

我有50个不同的fasta文件,我想用程序(glsearch36)来分析。 这些文件编号为3163proph00.fa - 3163proph49.fa。

我想将使用SGE排队系统作为阵列作业的这些50个几乎相同的作业提交给集群。

一个问题是SGE要求SGE_TASK_ID为1-50,所以我首先必须创建变量i并减去1得到0.然后我创建了j,因为数字有一个前导零。

我对bash不太熟悉,所以我确信在从SGE_TASK_ID到i到j时出现了一些语法错误。

当我提交此文件时,我收到以下错误“非法变量名称。”。

任何帮助都将不胜感激。

谢谢,

#!/bin/bash
#$ -cwd
#$ -t 1-50
#$ -e glsearch.err
#$ -o glsearch.out
#$ -N glsearch

#  really the files are 00-49
i=$(($SGE_TASK_ID - 1))
j= printf "%02d" "$i"
echo $j
/g/bor/x86_64/bin/glsearch36 -T 1 /g/bor/Viruses/3163_proph_split50/3163proph$j.fa /g/bor/Viruses/prophage_region.fna > glsearch_3163proph$j.txt

2 个答案:

答案 0 :(得分:1)

  • $ ((...))
  • space 之前和之后
  • 没有 =
  • printf 加入 $(...)

    i=$((SGE_TASK_ID - 1))
    j=$(printf "%02d" "$i")
    

答案 1 :(得分:0)

我怀疑你的作业是在posix_compliant队列中运行的,/ bin / csh是默认的shell。因为队列是posix_compliant你的#!将忽略该行,并使用默认shell。您可以使用-S指令覆盖默认shell到Grid Engine。

#$ -S /bin/bash