지정된 날짜에 대기열에서 작업 제거

지정된 날짜에 대기열에서 작업 제거

대기열에 일련의 보류 중인 작업이 있습니다.

$ 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출력 에서 atqgrep
  • cut공백을 구분 기호로 사용하고 가정하여 첫 번째 필드만 선택합니다.
  • 공백을 줄 바꿈하려면 다음 명령을 사용하십시오.tr

at그러면 한 줄에 작업 번호가 제공되며 이를 입력으로 사용할 수 있습니다 atrm.

다음을 사용하여 작업 ID를 나열하여 선택 항목을 사전 테스트합니다.

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

관련 정보