Aqui está a solução (obrigado Sr. Kitt e patos).
Como Tail -f saída com cores usando apenas Awk e mostrar o resto da saída?
Eu quero monitorar dois arquivos de log diferentes (no momento em que os eventos aparecem nos logs).
tail -f /var/log/file1 -f /var/log/file2
Para cada arquivo, quero pesquisar alguns padrões:
tail -f /var/log/file1 | grep '\(pattern1\|pattern2\)'
tail -f /var/log/file2 | grep '\(pattern3\|pattern4\|pattern5\)'
Eu não sei como fazer isso funcionar todos juntos. Além disso, gostaria de imprimir a saída de logs file1 em vermelho e a saída de logs file2 em azul:
Mais uma vez, posso fazer isso por um arquivo (snippet que eu peguei neste fórum):
RED='3[0;31m'
BLUE='3[0;34m'
tail -fn0 /var/log/file1 | while read line;
do
if echo $line | grep -q '\(pattern1\|pattern2\)';then
echo -e "{$RED}$line"
fi
done
Mas eu absolutamente não sei como fazer isso para vários arquivos. Alguma idéia?
Aqui está a solução (obrigado Sr. Kitt e patos).
Como Tail -f saída com cores usando apenas Awk e mostrar o resto da saída?
Se você quiser analisar vários registros ao mesmo tempo, use a seguinte sintaxe:
tail -f /var/log/{log1,log2}
Isso produzirá a saída desejada de todos os logs necessários, para que você possa usar o argumento -e
em grep
para criar vários padrões. Então, todos juntos:
tail -f /var/log/{log1,log2} | grep -ie "pattern1" -ie "pattern2" -ie "pattern3"
Em relação à colorização do grep, dê uma olhada na esta resposta excelente.
tail -n 0 -f file1 file2 |
awk -v file1pattern="pattern1|pattern2" -v file2pattern="pattern3|pattern4" \
'/^==> file1 <==$/ { print "3[0;31m"; pattern=file1pattern };
/^==> file2 <==$/ { print "3[0;34m"; pattern=file2pattern }; $0 ~ pattern'