
在我正在使用的系统上,我经常需要取消我运行的作业。我可以这样检查我的工作:
$ 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)