대기열에 일련의 보류 중인 작업이 있습니다.
$ 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' ' '