在指定日期从队列中删除作业

Abs*_*cDo 3 scripting at

我有一系列待处理的工作在队列中,

$ atq
8   Mon Oct 29 13:21:00 2018
5   Mon Oct 29 10:36:00 2018
15  Mon Oct 29 13:31:00 2018
4   Mon Oct 29 10:35:00 2018
18  Mon Oct 29 15:55:00 2018
3   Mon Oct 29 10:31:00 2018
16  Mon Oct 29 15:54:00 2018
11  Mon Oct 29 13:24:00 2018
12  Mon Oct 29 13:24:00 2018
17  Mon Oct 29 15:53:00 2018
10  Mon Oct 29 13:23:00 2018
19  Tue Oct 30 15:43:00 2018
2   Mon Oct 29 07:41:00 2018
6   Mon Oct 29 10:41:00 2018
7   Mon Oct 29 13:20:00 2018
9   Mon Oct 29 13:22:00 2018
Run Code Online (Sandbox Code Playgroud)

并计划在 10 月 29 日移除他们的工作。幸运的是,atrm 可以移除多个工作

atrm 8 5 15 4 
Run Code Online (Sandbox Code Playgroud)

尽管如此,迭代可能是更好的解决方案,

$ atq | grep "Oct 29"
18  Mon Oct 29 15:55:00 2018
3   Mon Oct 29 10:31:00 2018
16  Mon Oct 29 15:54:00 2018
11  Mon Oct 29 13:24:00 2018
12  Mon Oct 29 13:24:00 2018
17  Mon Oct 29 15:53:00 2018
10  Mon Oct 29 13:23:00 2018
2   Mon Oct 29 07:41:00 2018
6   Mon Oct 29 10:41:00 2018
7   Mon Oct 29 13:20:00 2018
9   Mon Oct 29 13:22:00 2018
Run Code Online (Sandbox Code Playgroud)

我怎样才能选择工作编号的第一个字段以便迭代它们?

Kus*_*nda 5

atq | awk '/Oct 29/ { print $1 }'
Run Code Online (Sandbox Code Playgroud)

这将打印包含字符串的作业的作业 ID Oct 29。

什么awk代码正在做的是来匹配每个输入线的给定的正则表达式,而对于行匹配它打印就行(作业ID)第一空格分隔的字段。

将此短管道的结果传递给xargs atrm将删除作业:

atq | awk '/Oct 29/ { print $1 }' | xargs atrm
Run Code Online (Sandbox Code Playgroud)

该xargs实用程序从其标准输入流中读取,并使用 read 参数执行给定的实用程序。如果有很多参数(在这种情况下可能不是),xargs可以多次执行该实用程序。