여러 파일로 나누고 싶은 로그 파일이 있습니다.
목차
*** 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
.