Pipe
管道程序輸出到按行和空格分割的命令
在我使用的系統上,我經常需要取消我執行的作業。我可以像這樣檢查我的工作:
$ 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
?
嘗試
showq | awk '/jquick/ { printf "canceljob %d\n",$1}'
如果可以,通過管道連接到 bash,或者
showq | awk '/jquick/ { print $1}' | xargs canceljob
解析空格分隔的列是 awk 擅長的。
canceljob $(showq | awk '$2 == "jquick" {print $1}')
或更直接地
showq | awk '$2 == "jquick" {system("canceljob " + $1)}'
或者,傳遞一個約束以
showq
使其僅報告所需的作業。canceljob $(showq -w user=jquick)