Sed 또는 awk,나는 어떻게 처리 기록 분리기는※*여러 줄에 걸쳐?

StackOverflow https://stackoverflow.com/questions/310191

  •  10-07-2019
  •  | 
  •  

문제

나의 로그 파일입니다:

 Wed Nov 12 blah blah blah blah cat1
 Wed Nov 12 blah blah blah blah
 Wed Nov 12 blah blah blah blah 
 Wed Nov 12 blah blah blah blah cat2
     more blah blah
     even more blah blah
 Wed Nov 12 blah blah blah blah cat3
 Wed Nov 12 blah blah blah blah cat4

내가 원하는 분석 밖으로 전체 여러 항목을 고양이에서 발견되는 첫 번째 라인입니다.는 가장 좋은 방법은 무엇인지에 이 sed 그리고/또는 awk?

즉내 구문 분석하여 생산:

 Wed Nov 12 blah blah blah blah cat1
 Wed Nov 12 blah blah blah blah cat2
     more blah blah
     even more blah blah
 Wed Nov 12 blah blah blah blah cat3
 Wed Nov 12 blah blah blah blah cat4
도움이 되었습니까?

해결책

우주로 시작하는 모든 라인을 말하면 (g) awk (내 기억에서 나온 것입니다. 아마도 약간의 오타가 포함되어 있고 추가 라인 브레이크가 포함 된 더 나은 가독성이 포함되어있을 것입니다.

awk " BEGIN { multiline = 0;} 
      ! /^ / { if (whatever) 
                 { print; multiline = 1;} 
               else 
                 multiline = 0; 
             } 
        /^ / {if (multiline == 1) 
                 print;
             } 
     " 
      yourfile

어디 whatever 출력이 발생하는지 확인하십시오 (예 : 고양이).

다른 팁

가정 귀하의 로그 파일을 포함하지 않는 컨트롤 캐릭터 '\01''\02', 고는 계속 줄을 시작으로 정확하게 네 가지 공간,다음과 같은 작동 수 있습니다:

c1=`echo -en '\01'`
c2=`echo -en '\02'`
cat logfile | tr '\n' $c1 | sed "s/$c1    /$c2/g" | sed "s/$c1/\n/g" | grep cat | sed "s/$c2/\n    /g"

설명:이를 대체 각각의 ASCII newline1(어는 캐릭터에 나타나지 않아야 합니다 로그를 파일)그리고 각각의 순서"newline-공간 공간 공간 공간"ASCII2 조(다른 통제)등을 사용할 수 있습니다.그런 다음 다시 대체 ASCII1 줄바꿈,그래서 지금의 각 시퀀스가 여러 라인은 하나로 라인,오래 된 줄 바꿈에 의해 대체 ASCII2.이 grepped 에 대한 고양이,그리고 다음 ASCII2 의 다시로 바뀌는 줄 바꿈-공간 공간 공간 공간을 조합이다.

이 같은?

awk 'function print_part() { if(cat) print part }  /^  / { part = part "\n" $0; next } /cat[0-9]$/ { print_part(); part = $0; cat = 1; next;  } { print_part(); cat=0} END { print_part() }' inputfile

그만큼 /^ / Regexp는 연속선을 식별합니다.

그만큼 /cat[0-9]$/ Regexp는 보관하려는 스타터 라인을 식별합니다.

또 다른 접근법은 설정하는 것입니다 RS 정상이 아닌 다른 것이 됨 \n. 예를 들어:

$ awk -v Pre=Wed 'BEGIN {RS = "\\n?\\s*" Pre} /cat.\n?/ {print Pre $0}' file.log
Wed Nov 12 blah blah blah blah cat1
Wed Nov 12 blah blah blah blah cat2
     more blah blah
     even more blah blah
Wed Nov 12 blah blah blah blah cat3
Wed Nov 12 blah blah blah blah cat4
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top