Pipe

管道程序輸出到按行和空格分割的命令

  • April 12, 2016

在我使用的系統上,我經常需要取消我執行的作業。我可以像這樣檢查我的工作:

$ 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)

引用自:https://unix.stackexchange.com/questions/275994