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