여러 데이터 조각을 별도의 파일로 구문 분석

여러 데이터 조각을 별도의 파일로 구문 분석

별도의 로그 파일로 구문 분석하려는 여러 로그가 포함된 연결된 로그 파일이 있습니다. 나중에 각각의 날짜/시간으로 이름을 바꾸겠습니다. 각 로그는 "--- LOG REPORT ---"로 구분됩니다.

지금까지 나는 다음을 가지고 있습니다 :

sed -n '/--- LOG REPORT ---/,/--- LOG REPORT ---/p' logname.log > test.out

그러나 상상할 수 있듯이 이는 패턴의 첫 번째 인스턴스만 출력합니다. sed에 대한 매뉴얼 페이지를 보았지만 여러 파일을 출력할 수 있다고 생각하지 않습니다. 파일이 비워질 때까지 파일을 계속 추출할 수도 있지만 작업이 너무 많은 것 같습니다. 어떻게 해야 하나요? 대신 awk를 사용해야 할까요?

입력 파일 filename.log의 예

--- LOG REPORT ---
Mary
Had
A
Little
Lamb
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

원하는 출력:

filename_1.log에 있음

--- LOG REPORT ---
Mary
Had
A
Little
Lamb

filename_2.log에 있음

--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

답변1

이 명령은 어떻습니까?

csplit logname.log /---\ LOG\ REPORT\ ---/ {*}

시험

cat logname.log
--- LOG REPORT ---
Mary
Had
A
Little
Lamb
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

위의 명령을 실행한 후 내가 얻는 결과는 다음과 같습니다.

cat xx01
--- LOG REPORT ---
Mary
Had
A
Little
Lamb
cat xx02
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow

답변2

어때요?

awk '/--- LOG REPORT ---/ {n++;next} {print > "test"n".out"}' logname.log

답변3

잘못된 도구입니다. 예를 들어 Perl 또는 awk를 사용하세요.

cat > splitFileByLogReport.pl <<EOF
#!/usr/bin/perl

undef $/;
$_ = <>;
$n = 0;

for $match (split(/(?=--- LOG REPORT ---)/)) {
      open(O, ">$ARGV[$argnum]" . ++$n);
      print O $match;
      close(O);
}

말초 혈액

그런 다음 다음을 실행하십시오.

perl splitFileByLogReport.pl yourFile.txt

관련 정보