Como faço para grep dois padrões de um arquivo e direcionar as linhas para diferentes arquivos de saída dependendo de qual patter corresponde?

1

Estou procurando por dois padrões de arquivos muito grandes e não quero mais de uma vez. Eu estou atualmente executando este comando para procurar o padrão, então se for encontrado também pegue uma linha antes e duas linhas após a linha com a correspondência, então remova os separadores de linha com sed e finalmente feche a saída:

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

Como eu poderia procurar os dois padrões 1 e 2 simultaneamente e imprimir minhas linhas para out1.gz ou out2.gz, respectivamente. Eu li este tópico mas não estou familiarizado com o awk, então não tenho certeza se isso se aplica à minha situação.

Obrigado

    
por David Wells 11.12.2015 / 19:10

1 resposta

0

Você pode fazer:

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

Aqui tee enviará a saída inicial de zgrep -B1 -A2 'pat_1\|pat_2' In.gz two-ways:

  • Os comandos dentro da substituição do processo >() funcionarão em um padrão ( pat_1 )

  • A saída enviada para STDOUT será capturada pelo próximo piped grep e será trabalhada para obter a saída para o segundo padrão ( pat_2 ).

por 11.12.2015 / 19:28

Tags