형식화된 출력을 위한 쉘 스크립트

형식화된 출력을 위한 쉘 스크립트
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 스크립트 자체에서 작은따옴표를 사용하는 경우 주의하세요. 이것은 약간 까다로울 수 있습니다.

관련 정보