첫 번째 줄을 유지하고 모든 단락의 내용을 모두 삭제합니다(특정 패턴까지).

첫 번째 줄을 유지하고 모든 단락의 내용을 모두 삭제합니다(특정 패턴까지).

이와 같은 데이터가 포함된 로그 파일이 있습니다.

criteria (NO-NO) data/speed/profile_1
    someting something useless data
    something something useless data
    more useless data
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
    someting something useless data
    something something useless data
    more useless data
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

이것이 내가 원하는 결과입니다:

criteria (NO-NO) data/speed/profile_1
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

나는 awk 'NR==1||c-->0;/^$/{c=1}' logs.txt각 단락의 첫 번째 줄을 가져오고 "Ref"라는 단어 앞의 모든 내용을 제거했지만 sed 's/^.*\(Ref\)/\1/' logs.txt탭 문자만 제거했습니다. 원하는 출력을 얻기 위해 모든 것을 결합하는 방법을 잘 모르겠습니다.

답변1

다음과 같은 상태 저장 작업을 수행할 수 있습니다.

/first-pattern/ {print; p = 0} /second-pattern/ {p = 1} p

전임자.

$ awk '/^criteria/ {print; p = 0} /(Old|New) run:/ {p = 1} p' file.log
criteria (NO-NO) data/speed/profile_1
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

답변2

게시한 입력/출력 예제를 고려하면 필요한 것은 다음과 같습니다.

$ grep -v '^    [^ ]' file
criteria (NO-NO) data/speed/profile_1
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

이것이 필요한 전부가 아니라면 질문을 편집하여 보다 대표적인 입력/출력 예제를 제공하십시오.

답변3

범위 연산자를 사용하는 Gnu sed는 이 경우에 적합합니다.

$ sed -Ee '
    /^criteria/,/^$/!d
    //b
    /(Old|New) run:/!d
' file

답변4

다음 명령을 사용해보십시오

awk '/criteria/||/:/{print $0}' filename

관련 정보