시간순으로 작업을 정렬 Sat

아마도 내가 놓은 간단한 해결책 일 것입니다. 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-sort--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/합니다.


답변

복잡해 보이지만 작동합니다.

atq |awk '{system("echo "$1 "  $(date +%Y-%m-%d_%H-%M-%S \
--date \""$2" "$3" "$4" "$5" "$6"\")  "$7"  "$8 )}' |sort -k2
    469  2012-03-24_01-30-00  a  master
    655  2012-03-24_02-03-00  a  master
    671  2012-03-24_02-04-00  a  master
    657  2012-03-24_02-09-00  a  master
    673  2012-03-24_02-11-00  a  master
    537  2012-03-25_00-38-00  a  master
    539  2012-03-25_00-43-00  a  master
    652  2012-03-27_12-57-00  a  master
    654  2012-03-27_13-03-00  a  master
    656  2012-03-27_13-09-00  a  master

다른 제안과 비교하여 실제 파싱이 date텍스트 타임 스탬프를 이해하는 방식을 좋아 하므로 나중에 필터링하거나 정렬하기가 쉬운 원하는 형식으로 다시 포맷 할 수 있습니다.

|column -t 마지막 에 a 를 쳐서 필드를 잘 정렬하고 간격을 맞출 수 있습니다.


답변