“cut” trava ao usar “tail -f” em combinação com “tr”

3

Eu tento transmitir arquivos de log de bate-papo para alguma saída de fala e quero remover os carimbos de data / hora com cut e remover caracteres especiais com tr . Infelizmente, cut parece parar ao usá-lo com tail -f em combinação com tr :

//works
$ tail /path/to/chatlogs | cut -b18- 
test
test

//works, too
$ tail /path/to/chatlogs | tr -C -d  '[:alnum:][:cntrl:] '
test
test

// does not work
$ tail -f /path/to/chatlogs | tr -C -d  '[:alnum:][:cntrl:] ' | cut -b18-
//no output

Por quê? Como posso contornar isso?

Até trava quando canaliza duas vezes para cut :

$ tail -f file | cut -b5- | cut -b5-
//no output
    
por cweiske 16.12.2015 / 12:44

2 respostas

8

A sintaxe usada apenas processa novas entradas em /path/to/chatlogs . Tente executar o comando e registre uma nova entrada em /path/to/chatlogs e veja qual é a saída ou tente:

tail -1000f /path/to/chatlogs | tr -C -d  '[:alnum:][:cntrl:] ' | cut -b18-

para que as últimas 1000 linhas também sejam processadas.

A parte 'pendente' é, na verdade, o processo tail , que aguarda a passagem de mais dados pelo canal.

Para desativar o buffer do comando tr use:

tail -f /path/to/chatlogs | stdbuf -i0 -oL tr -C -d  '[:alnum:][:cntrl:] ' | cut -b18-

O texto acima é usado em Desativar o buffer no tubo

    
por 16.12.2015 / 13:35
0

Ao usar vários canais, estou correndo em problemas de buffer stdio.

O problema é descrito em detalhes no link e não parece haver uma solução.

    
por 16.12.2015 / 13:36

Tags