Удалить все «в» Задания, кроме первых пяти заданий

Я хочу сохранить только первые пять запланированных заданий (как в младших 5 идентификационных номерах задания) и удалить остальные запланированные задания atq. Как мне это сделать?

В моей системе Debian at сортировке заданий к моменту их запуска, а не в том порядке, в котором они были указаны:

 $ for i in 10 20 30 40 50 60 70; do at now + "$i" min < scripts/foo.sh; sleep 1; done warning: commands will be executed using /bin/sh job 8 at Sat Apr 18 15:31:00 2015 warning: commands will be executed using /bin/sh job 9 at Sat Apr 18 15:41:00 2015 warning: commands will be executed using /bin/sh job 10 at Sat Apr 18 15:51:00 2015 warning: commands will be executed using /bin/sh job 11 at Sat Apr 18 16:01:00 2015 warning: commands will be executed using /bin/sh job 12 at Sat Apr 18 16:12:00 2015 warning: commands will be executed using /bin/sh job 13 at Sat Apr 18 16:22:00 2015 warning: commands will be executed using /bin/sh job 14 at Sat Apr 18 16:32:00 2015 $ atq 9 Sat Apr 18 15:41:00 2015 a terdon 11 Sat Apr 18 16:01:00 2015 a terdon 10 Sat Apr 18 15:51:00 2015 a terdon 12 Sat Apr 18 16:12:00 2015 a terdon 8 Sat Apr 18 15:31:00 2015 a terdon 14 Sat Apr 18 16:32:00 2015 a terdon 13 Sat Apr 18 16:22:00 2015 a terdon 

Как вы можете видеть, at прежнему будут atq задания в том порядке, в котором они будут выполняться, но atq перечисляет их в явно случайном порядке.

  1. Чтобы удалить первые 5 заданий, перечисленных в atq , вы можете:

     atrm $(atq | head -5 | cut -f 1) 
  2. Чтобы удалить первые 5 заданий в соответствии с порядком их запуска, выполните следующие действия:

     atrm $(atq | sort -n | head -5 | cut -f 1) 

Это удаляет первые 5, так что неправильно, если вы можете узнать, как сделать перевернутую голову (удалить голову), тогда вы получите ответ. Сочетание wc и tail может это сделать.

 atq | sort -g | head -5 | cut -f1 | xargs atrm 

Правильный ответ

 atq | sort -g | tail -n +6 | cut -f1 | xargs atrm