콘텐츠에 따라 여러 파일로 나누고 싶은 로그 파일이 있습니다.

콘텐츠에 따라 여러 파일로 나누고 싶은 로그 파일이 있습니다.

여러 파일로 나누고 싶은 로그 파일이 있습니다.

목차

*** 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}

    비어 있지 않은 값인 경우 fname현재 행을 이름이 지정된 파일에 씁니다 fname.

관련 정보