06/26/2017 23:40:40 CAUAJM_I_10082 [aspsun14 connected for IOALPPRXXBD_ALPGLGENFAALL 55443.15215291.1]
06/26/2017 23:40:40 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: STARTING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/26/2017 23:40:42 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: RUNNING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/26/2017 23:49:19 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: SUCCESS JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14 EXITCODE: 0
06/27/2017 23:40:23 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: STARTING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/27/2017 23:40:24 CAUAJM_I_10082 [aspsun14 connected for IOALPPRXXBD_ALPGLGENFAALL 55443.15236942.1]
06/27/2017 23:40:25 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: RUNNING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/27/2017 23:48:19 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: SUCCESS JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14 EXITCODE: 0
06/28/2017 23:41:36 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: STARTING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/28/2017 23:41:37 CAUAJM_I_10082 [aspsun14 connected for IOALPPRXXBD_ALPGLGENFAALL 55443.15258301.1]
06/28/2017 23:41:38 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: RUNNING JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14
06/28/2017 23:48:47 CAUAJM_I_40245 EVENT: CHANGE_STATUS STATUS: SUCCESS JOB: IOALPPRXXBD_ALPGLGENFAALL MACHINE: aspsun14 EXITCODE: 0
위의 내용이 포함된 파일이 있고 예를 들어 작업 이름, 시작 시간, 종료 시간 등의 출력을 원합니다.
IOALPPRXXBD_ALPGLGENFAALL 06/26/2017 23:40:40 06/26/2017 23:49:19
IOALPPRXXBD_ALPGLGENFAALL 06/27/2017 23:40:23 06/27/2017 23:48:19
IOALPPRXXBD_ALPGLGENFAALL 06/28/2017 23:41:36 06/28/2017 23:48:47
답변1
awk는 이런 일에 매우 편리합니다.
#!/usr/bin/awk -f
$5 == "CHANGE_STATUS" && $7 == "STARTING" {
start[$9] = $1 " " $2
}
$5 == "CHANGE_STATUS" && $7 == "SUCCESS" {
print $9,start[$9],$1,$2
}
$n은 n번째 열입니다. 시작 날짜를 저장하고 작업 종료 날짜를 찾으면 모든 것을 인쇄합니다. (코드를 실행파일로 저장하고 입력파일을 인자로 전달하여 호출합니다.)
./script input.txt
이것을 Bash 스크립트에 반드시 포함시켜야 한다면 다음을 수행하십시오:
awk '
$5 == "CHANGE_STATUS" && $7 == "STARTING" {
start[$9] = $1 " " $2
}
$5 == "CHANGE_STATUS" && $7 == "SUCCESS" {
print $9,start[$9],$1,$2
}
' input_file_or_whatever
하지만 Awk 스크립트 자체에서 작은따옴표를 사용하는 경우 주의하세요. 이것은 약간 까다로울 수 있습니다.