Date

按時間順序排列工作

  • January 20, 2017

可能是我放錯地方的簡單解決方案。如何獲得atq按時間順序排序的輸出,以便我可以輕鬆查看下一個要執行的人?man頁面sort沒有內置任何東西來辨識時間戳,如下所示:

atq
1264    Sat Mar 24 15:03:00 2012 a master
1445    Sat Mar 24 20:28:00 2012 a master
1548    Sun Mar 25 15:09:00 2012 a master
1193    Sat Mar 24 11:03:00 2012 a master
1359    Sat Mar 24 17:13:00 2012 a master
1726    Mon Mar 26 21:24:00 2012 a master
1736    Mon Mar 26 22:04:00 2012 a master
1748    Mon Mar 26 22:46:00 2012 a master
1704    Mon Mar 26 20:19:00 2012 a master
1288    Sat Mar 24 15:38:00 2012 a master
1532    Sun Mar 25 11:53:00 2012 a master

atq |sort在工作 ID 跳來跳去時也不會工作。

假設您使用的是 Linux,則輸出atq的日期始終具有相同的格式。以適當的順序對欄位進行排序,注意聲明哪些是數字或月份名稱。確保對月份名稱使用英語語言環境,因為這是atq使用的。

atq | sort -k 6n -k 3M -k 4n -k 5 -k 7 -k 1
#          year  month day   time queue id

sort命令可以做到,但不幸的是,您不能將--month-sortand--numeric-sort一起使用。所以使用:

$ atq |
   sed 's/Jan/1/;s/Feb/2/;s/Mar/3/;s/Apr/4/;s/May/5/;s/Jun/6/;s/Jul/7/;s/Aug/8/;s/Sep/9/;s/Oct/10/;s/Nov/11/;s/Dec/12/' |
   sort -n -k6,6 -k3,4

這會將月份縮寫轉換為其數值,然後首先按年份 ( -k6,6) 排序,然後是月份和日期 ( -k3,4)。輸出不會有月份名稱,但如果你真的想要,你可以用另一個sed.

$ atq |
   sed 's/Jan/1/;s/Feb/2/;s/Mar/3/;s/Apr/4/;s/May/5/;s/Jun/6/;s/Jul/7/;s/Aug/8/;s/Sep/9/;s/Oct/10/;s/Nov/11/;s/Dec/12/' |
   sort -n -k6,6 -k3,4 |
   sed 'h;s/^[0-9][0-9]*  *[A-Z][a-z][a-z] *\([0-9][0-9]*\).*/\1/;s/10/Oct/;s/11/Nov/;s/12/Dec/;s/1/Jan/;s/2/Feb/;s/3/Mar/;s/4/Apr/;s/5/May/;s/6/Jun/;s/7/Jul/;s/8/Aug/;s/9/Sep/;G;s/^\(.*\)\n\([0-9][0-9]*  *[A-Z][a-z][a-z] *\)[0-9][0-9]*\( .*\)/\2\1\3/'

注意s/12/Dec/需要放在前面s/1/Jan/

引用自:https://unix.stackexchange.com/questions/34827