如何使用Xargs在Slurm上提交多个作业

时间:2019-05-16 21:48:09

标签: xargs slurm

嗨,我有大约100多个文件,我需要提交非常相似的工作才能进行口吃。我正在尝试使用xargs遍历这些文件并提交,但是它没有按预期工作。有什么建议吗?

file.txt=
file1a file1b file1
.
.
.
file100a file100b file100

cat SpleenGlia/data/file.txt | xargs -l bash -c ‘sbatch --job-name=$3 --output=SpleenGlia/Aligned/$3 SpleenGlia/script.sh $1 $2 $3’

我想使用sbatch提交至饮。 script.sh是使用所有3个变量的脚本。我想提交的作业名称为文件名(第三个变量),并输出到具有该文件名的文件。

运行上面的代码可以给我

--job-name=: ‘sbatch: command not found

3 个答案:

答案 0 :(得分:0)

您应该从0而不是1开始索引。请参见下面的示例,我添加了下划线以突出显示缺少的值$3

$ cat file.txt  | xargs -l bash -c 'echo arguments _$1_ _$2_ _$3_'
arguments _file1b_ _file1_ __
arguments _file100b_ _file100_ __

正确的,写在$0

$ cat file.txt  | xargs -l bash -c 'echo arguments _$0_ _$1_ _$2_'
arguments _file1a_ _file1b_ _file1_
arguments _file100a_ _file100b_ _file100_

这可能是导致错误的原因,因为--job-name=没有收到参数。

答案 1 :(得分:0)

您似乎使用了错误的引号。错误提示:

--job-name=: ‘sbatch: command not found

,因此看来Bash将引号作为要运行的可执行文件的一部分。 (确实确实是'而不是'或'。)尝试用双引号("替换引号。

答案 2 :(得分:0)

如何使用awk将命令格式化为文本并将其通过xargs传递到子进程:

cat awk.txt | awk '{printf("sbatch --job-name=%s --output=SpleenGlia/Aligned/%s SpleenGlia/script.sh %s", $3, $3, $0)}' | xargs -I{} sh -c "{}"