Em vez de imprimir linhas correspondentes com decorações, decore linhas correspondentes e imprima tudo:
awk '/User@Host:/ { $0 = "3[32m" $0 "3[39m" }; /Query_time:/ { $0 = "3[29m" $0 "3[39m" }; 1'
Este programa awk
consiste em três padrões e ações associadas:
- as linhas correspondentes a
User@Host:
são processadas com$0 = "3[32m" $0 "3[39m"
, que envolve a linha atual com os códigos de escape fornecidos; - linhas correspondentes a
Query_time:
são processadas com$0 = "3[29m" $0 "3[39m"
; - linhas para as quais o padrão
1
é diferente de zero (portanto, todas as linhas) são processadas com a ação padrão, que é imprimir a linha atual.
São cumulativos: todas as ações cujos padrões correspondem à linha atual são executadas, na ordem em que são definidas. Uma linha correspondente a User@Host:
é modificada (primeira ação) e impressa (terceira ação). Uma linha correspondente a Query_time:
é modificada (segunda ação) e impressa (terceira ação). Uma linha correspondente a nenhuma é impressa (terceira ação).
Essa é a técnica mais simples para imprimir todas as linhas, sem precisar controlar se uma linha já foi processada (para evitar imprimir uma linha duas vezes). Em vez de imprimir algo em cada conjunto de declarações de ação, modificamos a linha atual conforme apropriado e apenas a imprimimos uma vez (mas sempre a imprimimos).