Leitura de um arquivo de log em constante mudança [duplicado]

11

Existe /location/of/thefile , que é um arquivo de log em constante mudança. A densidade média de atualizações é de 4 por minuto, a taxa de atualização máxima possível pode ser de 30 a 40 por minuto. Cada atualização adiciona 2-5 linhas (média), mas pode ser centenas em casos extremos. Cada linha começa com um timestamp [YYYY-MM-DD HH:MM:SS] seguido por texto simples (100-200, no máximo algumas centenas de caracteres).

Minha tarefa é construir um comando simples que monitore continuamente esse arquivo de log e envie para o stdout todas as linhas que contiverem as sequências alfabéticas foo OR bar . Antes e depois dessas (sub) strings, pode haver qualquer caractere ( \n somente após a (sub) string, é claro), mesmo %code% . A capitalização das palavras poderia ser todas as variações possíveis.

Bem, minhas ideias para a solução sempre contêm syscalls para o tempo, mas eu não deveria usá-las. Por favor, construa um comando simples . Muito obrigado!

    
por Gilles 07.04.2011 / 18:10

2 respostas

26

Eu posso estar entendendo mal a questão, mas há uma razão pela qual você não pode usar isso?

tail -f /location/of/thefile | grep -i -E "foo|bar"

    
por 07.04.2011 / 18:58
0

use o pipe nomeado assim:

arquivo para ler continuamente: logfile.txt

código: (diga readfile.sh) enquanto lê a linha Faz   linha echo $ feito < mypipe

No shell:

mkfifo mypipe ./readfile.sh this will block (will not exit)

No shell anular, vá para o mesmo diretório.

tail -f logfile.txt >> mypipe & this will go to back ground

Feito. o que quer que continue entrando no logfile.txt será impresso via readfile.sh que não saiu.

    
por 15.11.2013 / 23:33