嗨,我有大约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
答案 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 "{}"