Unix循环切换

时间:2017-03-03 01:02:57

标签: bash loops unix grep

我有一堆slurm个作业,用这种格式生成标准输出和错误文件:

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

其中job_id是由slurm分配的职位ID。

为了获得这些工作ID,我可以:

cut -f 4 -d "." *.ERR

我想将此命令的输出传递给一个循环,该循环将运行sacct -j <job_id>grep哪些作业失败,使用:

sacct -j <job_id> | grep "FAILED"

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

1 个答案:

答案 0 :(得分:3)

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

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

你也可以使用xargs,这是更多的succint:

cut -f4 -d. *.ERR | xargs -n 1 sacct -j | grep "FAILED"