Salta vários arquivos enquanto canaliza um dos arquivos através do grep

4

Eu quero usar tail seguir dois arquivos de log, mas um dos arquivos de log tem muitos dados, então eu quero filtrado com grep.

tail -f file1 file2|grep mySearch

O problema com isto é que ambos os arquivos são executados através do grep ou melhor, a saída do tail é executada através do grep. Somente o arquivo2 deve ser filtrado com o grep do mySearch. Alguma idéia?

Eu tentei pipes nomeados, substituições de processos e comandos compostos.

    
por Brian 11.08.2010 / 04:38

3 respostas

1

você pode executar as duas caudas em segundo plano, canalizando a saída filtrada e não filtrada para um arquivo temporário.

Em seguida, use esse arquivo temporário como a fonte para o que você precisa fazer -

tail -f file1 >> temp &
tail -f file2 | grep mySearch >> temp &


do something with temp now
    
por 11.08.2010 / 05:54
2

Algumas maneiras de esfolar um gato aqui. Meu favorito pessoal é o MultiTail . Ele fornece uma infinidade de maneiras de configurar e exibir a saída de arquivos, bem como várias maneiras de filtrar essa saída via regex. Você pode filtrar 1 arquivo por exemplo, deixando outros 4 inalterados. Você também pode fazer um filtro inverso, como grep -v .

Uma página de exemplos de comandos pode ser encontrada no link

Você também pode gostar de algumas capturas de tela dele em ação. Múltiplas janelas são controladas por ncurses.

Se você é do tipo de programação como eu, você pode criar uma solução personalizada com algo como o Perl's File::Tail usando select nas alças separadas.

    
por 11.08.2010 / 06:34
1

O multitail é parecido com o que eu preciso.

Isso é algo que eu tenho feito, o que é bom, exceto que as linhas de log não estão em ordem temporal exata.

------------- 8 < -------------

#!/bin/bash

function pidof_prog_file() {
 PGM=$1
 FIL=$2
 lsof -n 2>/dev/null| grep "${PGM}.*${FIL}" | tr -s ' ' | cut -d' ' -f 2
 }

T="tail -n 10 -f"

kill -TERM 'pidof_prog_file tail application.log'
$T /var/www/protected/runtime/application.log | tr '\t' ' ' | tr -s ' ' | sed "s|^|PHP:|" &

kill -TERM 'pidof_prog_file tail access.log'
$T /var/log/apache2/access.log | tr '\t' ' ' | tr -s ' ' | sed "s|^|HTTP:|" &

kill -TERM 'pidof_prog_file tail catalina.out'
$T /var/log/tomcat6/catalina.out  | tr '\t' ' ' | tr -s ' ' | sed "s|^|JAVA:|" &

kill -TERM 'pidof_prog_file ssh devj-db'
sudo -u $ME ssh $dbhost "$T /var/log/mysql/query.log"  | tr '\t' ' ' | tr -s ' ' | sed "s|^|SQL:|"
    
por 25.01.2011 / 11:28

Tags