行とスペースで区切られたコマンドによるパイププロセスの出力

行とスペースで区切られたコマンドによるパイププロセスの出力

作業中のシステムで実行されているジョブを頻繁にキャンセルする必要がある場合があります。私の仕事は次のように確認できます。

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

関連情報