한 파일에서 두 패턴을 수집하고 일치하는 패턴에 따라 행을 다른 출력 파일로 보내려면 어떻게 해야 합니까?

한 파일에서 두 패턴을 수집하고 일치하는 패턴에 따라 행을 다른 출력 파일로 보내려면 어떻게 해야 합니까?

매우 큰 파일에서 두 가지 패턴을 검색 중인데 여러 번 grep을 수행하고 싶지 않습니다. 현재 패턴을 찾기 위해 이 명령을 실행하고 있습니다. 발견되면 일치하는 줄 앞의 줄과 뒤의 두 줄도 가져온 다음 sed를 사용하여 줄 구분 기호를 제거하고 마지막으로 출력을 압축합니다.

zgrep -B 1 -A 2 'Pattern_1' In.gz | sed '/^--$/d' | gzip >out.gz

패턴 1과 2를 모두 찾고 내 라인을 각각 out1.gz 또는 out2.gz로 인쇄하려면 어떻게 해야 합니까? 나는 읽었다이 스레드하지만 저는 awk에 익숙하지 않아서 제 경우에도 작동할지는 잘 모르겠습니다.

감사해요

답변1

넌 할 수있어:

zgrep -B1 -A2 'pat_1\|pat_2' In.gz | tee >(grep -B1 -A2 'pat_1' | \
  grep -v '^--$' | gzip >out1.gz) | grep -B1 -A2 'pat_2' | \
    grep -v '^--$' | gzip >pat_2.gz

여기서 tee초기 출력은 두 가지 방법으로 전송됩니다.zgrep -B1 -A2 'pat_1\|pat_2' In.gz

  • 프로세스 대체 명령은 하나의 모드( ) >()에서 작동합니다 .pat_1

  • STDOUT으로 전송된 출력은 다음 파이프에서 캡처되고 처리되어 두 번째 모드( )의 출력을 grep얻습니다 .pat_2

관련 정보