Tail changing files

3

Estou tentando anexar arquivo observando dados que constantemente adicionam cada segundo e dados de canal a novos arquivos que serão processados posteriormente. usando

tail -f 'data file' >> 'destination file'

Mas como algumas linhas são duplicadas, então faço isso.

tail -f 'data file' | awk '!seen[$0]++' | >> 'destination file'

Isso parece bom, mas a linha seria dividida em algum momento, então acho que preciso proteger toda a linha para conseguir isso. Mas isso é uma boa maneira de fazer isso ou devo fazer de outra maneira?

tail -f 'data file' | grep --line-buffered -E '^.*$' | awk '!seen[$0++]'

Exemplo de dados completos

[9/10/17 14:21:09] Data=[xxx|yyy|zzz] 

Exemplo de divisão

[9/1
[9/10/17 14:21:09] Data=[xx 

algo como isto. Isso acontece depois que eu canalizo os dados de tail para awk . Então eu movo grep para o fim do comando e é trabalho. Mas os dados serão armazenados no buffer, se forem muito pequenos.

tail -f 'data file' | awk '!seen[$0++]' | grep --line-buffered -E '^.*$'

Obrigado pelo conselho e resposta!

    
por Nrto 10.10.2017 / 05:32

1 resposta

1

But some how some line is duplicate

Se as duplicatas forem linhas adjacentes, você pode tentar uniq :

$ tail -f <file> | uniq

Em um teste rápido, isso funcionou como esperado, aguardando uma linha completa antes de gravar a saída.

Se as linhas duplicadas estiverem espalhadas pelo arquivo, adicionar uniq ao canal entre tail e awk ainda poderá ajudar.

    
por 10.10.2017 / 16:29