파일의 두 타임스탬프 줄 사이의 Grep 및 병합 줄 - Unix

파일의 두 타임스탬프 줄 사이의 Grep 및 병합 줄 - Unix

Logfile.txt로그 파일에서 특정 패턴의 줄을 grep 하고 출력을 새 텍스트 파일로 리디렉션하려고 합니다 1.txt. 로그 파일에는 ^M일부 제어 문자가 포함되어 있으며 이 줄은 타임스탬프 줄 사이에서 사용할 수 있으므로 여러 줄을 모두 단일 줄로 병합하고 이전 줄에 Execute패턴이 포함된 경우 예상 결과에 추가해 보았습니다. 하지만 예상대로 얻을 수 없습니다

로그파일.txt

    1993-01-04 06:24:03,068 INFO  b: [Cool: read-189231]: Opening the File
    1993-01-04 06:24:13,068 INFO  b: [Cool: read-189231]: Checking the content
    1993-01-04 06:24:23,148 INFO  b: [Cool: read-189231]: Setting the session:
    1993-01-04 06:24:25,068 INFO  b: [Cool: read-189231]: Checking the content
    1993-01-04 06:24:25,068 INFO  b: [Cool: read-189231]: Compiling the query
    1993-01-04 06:24:27,148 INFO  ab: [Cool: read-189231]: Completed
    1993-01-04 06:25:22,168 INFO  ba: [Cool: read-190983]: Execute ^M
    I am just checking the answer ^M
    Need your support for the workaround ^M
    This log has some control character ^M
    1993-01-04 06:25:22,168 INFO  a: [Cool: read-190983]: Main Execution completed
    1993-01-04 06:25:52,188 INFO  ba: [Cool: read-190983]: Execute the line : How are you
    1993-01-04 06:26:45,268 INFO  a: [Cool: read-190983]: Exiting

코드 - 내가 찾은 결과

egrep -wah 'Setting the session:|Checking the line|Completed|Execute|Exiting' Logfile.txt > 1.txt

예상되는 결과

1993-01-04 06:24:23,148 INFO  b: [Cool: read-189231]: Setting the session:
1993-01-04 06:24:25,068 INFO  b: [Cool: read-189231]: Checking the line
1993-01-04 06:24:27,148 INFO  ab: [Cool: read-189231]: Completed
1993-01-04 06:25:22,168 INFO  ba: [Cool: read-190983]: Execute ^M I am just checking the answer ^M Need your support for the workaround ^M This log has some control character ^M
1993-01-04 06:25:52,188 INFO  ba: [Cool: read-190983]: Execute the line : How are you
1993-01-04 06:26:45,268 INFO  a: [Cool: read-190983]: Exiting

답변1

노력하다

awk '{X = $0; while (/\r$/) {getline; if (! /^[0-9]/) X = X $0}; gsub (/\r/, "", X); print X} 1 ' file

^M 문자가 나타나면 날짜를 읽을 때까지 루프를 돌면서 더 많은 줄을 추가한 다음 전체 줄을 인쇄합니다.

관련 정보