将进程输出通过管道传输到按行和空格分割的命令

将进程输出通过管道传输到按行和空格分割的命令

在我正在使用的系统上,我经常需要取消我运行的作业。我可以这样检查我的工作:

$ showq|grep jquick
2001744              jquick    Running   120    00:08:26  Mon Apr 11 11:06:02
2002020              jquick    Running   120    00:22:04  Mon Apr 11 11:19:40
2003328              jquick    Running   240     1:43:34  Mon Apr 11 12:41:10
2006300              jquick    Running   120     4:59:16  Mon Apr 11 15:56:52
2006312              jquick    Running   120     4:59:16  Mon Apr 11 15:56:52

我现在所做的是手动取消每个作业 ID:$ canceljob 2001744 2002020 2003328 2006300 2006312

如何过滤此输出以将作业 ID 直接通过管道传输到canceljob

答案1

尝试

showq | awk '/jquick/ { printf "canceljob %d\n",$1}'

如果可以,通过管道传输到 bash,或者

 showq | awk '/jquick/ { print $1}' | xargs canceljob

答案2

awk 擅长解析以空格分隔的列。

canceljob $(showq | awk '$2 == "jquick" {print $1}')

或者更直接

showq | awk '$2 == "jquick" {system("canceljob " + $1)}'

或者,将约束传递给showq使其仅报告所需的作业。

canceljob $(showq -w user=jquick)

相关内容