
非常に大きなファイルから2つのパターンを検索していますが、何度もgrepを実行したくありません。現在、パターンを見つけるためにこのコマンドを実行しています。見つかったら、一致する行の前の行と後の2行もインポートし、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
初期出力は2つの方法で送信される。zgrep -B1 -A2 'pat_1\|pat_2' In.gz
プロセス置換コマンドは1つのモード()
>()
で機能します。pat_1
STDOUTに送信された出力は、次のパイプでキャプチャされ処理され、2番目のモード()の出力が
grep
得られます。pat_2