我有一堆 slurm 作业,它们产生这种格式的标准输出和错误文件:

<string>.<string>.<string>.<job_id>.ERR

其中 job_idslurm 分配的作业 ID。

因此,要获得这些工作 ID,我可以:
cut -f 4 -d "." *.ERR

我想将此命令的输出通过管道传输到一个循环,该循环将运行 sacct -j <job_id>grep 哪些作业失败,使用:
sacct -j <job_id> | grep "FAILED"

这可以在一个命令中完成吗?

最佳答案

您可以使用 Bash read 循环,并进行进程替换:

while read -r job_id; do
  sacct -j "$job_id" | grep "FAILED"
done < <(cut -f4 -d. *.ERR)

您还可以使用 xargs ,它更简洁:
cut -f4 -d. *.ERR | xargs -n 1 sacct -j | grep "FAILED"

关于bash - Unix 循环覆盖 cut 的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42568810/

10-12 22:00