로그 파일이 있는데 내용에 따라 여러 파일로 분할하고 싶습니다.

로그 파일이 있는데 내용에 따라 여러 파일로 분할하고 싶습니다.

로그 파일이 있는데 여러 파일로 분할하고 싶습니다.

목차

*** Configuration Database
*** Logs
*** Configuration Logs
*** Query Logs
    .
    .
    and so on

문제는 섹션 제목이 섹션 사이에 적절한 데이터나 로그와 함께 본문 텍스트에 다시 나타나기 때문에 각 제목의 두 번째 인스턴스를 검색하고 해당 제목의 두 번째 인스턴스에 데이터를 복사해야 한다는 것입니다. 다음 제목.

*** Configuration Database
    (Data/Logs)

*** Logs
    (Data/Logs)

*** Configuration Logs
    (Data/Logs)

*** Query Logs
    (Data/Logs)

기본적으로 디버그 텍스트 파일을 가져오고 이에 대해 스크립트를 실행한 다음 원본 파일을 그대로 유지하면서 디렉터리의 각 섹션마다 하나씩 여러 텍스트 파일로 나누고 싶습니다. 따라서 기본적으로 새로운 섹션이 시작될 때까지 각 섹션의 모든 데이터가 포함된 debug.txt, Configuration Database.txt, Logs.txt 등이 있습니다. 이것은 내 능력을 넘어서는 것이므로 어떤 도움이라도 크게 감사하겠습니다 :)

답변1

이 시도:

awk '/^[*][*][*] /{ if ($0 in seen) fname=$0; else seen[$0];} fname{print>fname}' file

어떻게 작동하나요?

awk는 암시적으로 파일을 한 줄씩 읽습니다. 읽은 각 행에 대해 다음을 수행합니다.

  • /^[*][*][*] /{ if ($0 in seen) fname=$0; else seen[$0];}

    별 3개와 공백으로 시작하는 줄에 대해 이전에 해당 줄을 본 적이 있는지 확인합니다. 있는 경우 fname해당 행으로 설정합니다. 그렇지 않은 경우에는 seen행을 한 번 본 것을 나타내기 위해 연관 배열을 업데이트합니다 .

  • fname{print>fname}

    null이 아닌 경우 fname현재 줄을 이름이 지정된 파일에 씁니다 fname.

관련 정보