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

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

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

$ 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

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

atrm 8 5 15 4 

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

$ 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

我如何选择职位编号的第一个字段以便迭代它们?

答案1

atq | awk '/Oct 29/ { print $1 }'

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

awk代码所做的是将给定的正则表达式与每个输入行进行匹配,并为匹配的行打印该行上的第一个空格分隔的字段(作业 ID)。

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

atq | awk '/Oct 29/ { print $1 }' | xargs atrm

xargs实用程序从其标准输入流中读取数据,并使用读取的参数执行给定的实用程序。如果有许多参数(可能不是在本例中)xargs可能会多次执行该实用程序。

答案2

您可以通过管道输出atq并对其进行一些处理:

atrm $( atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' ' )

正在做什么:

  • Oct 29atq输出中grep
  • cut仅使用并假设空格作为分隔符选择第一个字段
  • 使用以下命令对空格进行换行tr

at这只会在一行中为您提供 的职位编号,然后您可以将其作为 的输入atrm

通过仅使用列出作业 ID 来预先测试选择

 atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' '

相关内容