我有一系列待处理的作业在队列中,
$ 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 29
从atq
输出中grepcut
仅使用并假设空格作为分隔符选择第一个字段- 使用以下命令对空格进行换行
tr
at
这只会在一行中为您提供 的职位编号,然后您可以将其作为 的输入atrm
。
通过仅使用列出作业 ID 来预先测试选择
atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' '