Eu tenho um arquivo de texto preenchido com um monte de dados.
Eu preciso retirar linhas que contêm strings específicas. Eu consegui isso com o awk usando o seguinte:
awk '/pattern1|pattern2|pattern3/ {print;}' infile
Eu então preciso colocar uma nova linha (\ n) após a terceira linha. Então, seria necessário se parecer com isso
pattern1
pattern2
pattern3
<new line>
pattern1...
Consegui fazer isso colocando o primeiro comando em outra instrução awk
awk -F '\n' '/pattern1|pattern2|pattern3/ { print; }' infile | awk '{ if ((NR % 3) == 1) printf("\n"); print; }'
Eu acho que deve haver uma maneira mais eficiente de fazer isso, então comecei a procurar para ver como eu poderia combinar os dois comandos juntos. Eu tentei o seguinte:
awk '/pattern1|pattern2|pattern3/ { if ((NR % 3) ==1 ) printf("\n"); print; }'
Eu percebi que isso funcionaria, mas a saída é completamente imprevisível, às vezes há 5 linhas agrupadas, grupos de 2 linhas, mas nenhuma linha de 3.
Eu estava pensando que talvez houvesse um problema no delimitador, então tentei brincar com a opção -F e configurar o IFS, mas não alterei a saída.
Eu acho que estou fazendo algo estúpido na maneira como tentei combinar a correspondência de padrões com a instrução if, mas não consegui descobrir a combinação.
É o que estou tentando fazer possível em um único comando awk? E se sim, para onde estou indo errado?