매우 큰 파일에서 두 가지 패턴을 검색 중인데 여러 번 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