Este é um padrão extremamente comum com o Awk. Colete linhas relacionadas em "registros", imprima o registro quando tiver coletado tudo se corresponder a uma condição específica.
tail -f file |
awk '/\[l]/ { if (p && stored) print stored; stored = ""; p=0 }
/\[logTypeA]/ { p=1 }
{ stored = stored (stored ? ORS : "") $0 }
END { if (p) print stored }'
A condição END
realmente não faz sentido com um fluxo sem fim de tail -f
, mas incluo-a como uma boa medida e para evitar falhas de teste irritantes quando o último registro com o qual deseja testar deve ser impresso , mas não ficará sem a cláusula END
.