提交具有随机文件名的 SGE 作业数组

Submit SGE job array with random file names

我有一个脚本,为每个子分析启动约 200 个作业。我意识到出于几个原因,工作数组可能会更好。这看起来很简单,但对我来说不太管用。我的输入文件没有编号,所以我按照我看到的示例进行了操作:

INFILE=`sed -n ${SGE_TASK_ID}p <pathto/listOfFiles.txt`

我的 qsub 命令接受了很多变量,因为它同时拉取和输出到不同的目录。 $res 没有改变,但是 $INFILE 是我正在循环的内容。

qsub -q test.q -t 1-200 -V -sync y -wd ${res} -b y perl -I /master/lib/ myanalysis.pl -c ${res}/${INFILE}/configFile-${INFILE}.txt -o ${res}/${INFILE}/

由于这行不通,我很好奇到底传递了什么。所以我对此做了回应,发现它似乎只扩展到第一次使用 $INFILE 时。所以我得到:

perl -I /master/lib/ myanalysis.pl -c mydirectory/fileABC/

而不是:

perl -I /master/lib/ myanalysis.pl -c mydirectory/fileABC/configFile-fileABC.txt -o mydirectory/fileABC/

希望对此有所了解,并欢迎提出所有建议。提前致谢!

更新:$SGE_TASK_ID 似乎没有在集群上设置。我寻找任何可用于数组 ID 的变量,但找不到任何东西。如果我看到任何其他内容,我会再次更新。

假设您使用的是 Grid Engine 变体,那么应该在作业中设置 SGE_TASK_ID。看起来您希望在使用 qsub 之前将其设置为一些有用的变量。提交这样的脚本将大致完成您似乎想要做的事情: #!/bin/bash INFILE=$(sed -n ${SGE_TASK_ID}p <pathto/listOfFiles.txt) exec perl -I /master/lib/ myanalysis.pl -c ${res}/${INFILE}/configFile-${INFILE}.txt -o ${res}/${INFILE}/

然后用

提交这个脚本
res=${res} qsub -q test.q -t 1-200 -V -sync y -wd ${res} myscript.sh

`