Eu tenho que inspecionar um log crescente em tempo real, e eu encontrei um problema que me faz perder algumas linhas (não consigo entender exatamente quais linhas) usando tail -f
ou tailf
, grep
e cut
.
Eu uso grep
porque quero filtrar linhas contendo uma palavra específica e, em seguida, cut -c -NUM
porque algumas linhas são muito longas e não quero que elas sejam incluídas na minha janela de terminal.
Aqui está um exemplo mínimo, no qual estou assistindo a um registro de amostra feito de linhas "Nth line" , filtrando a palavra "line" , faltando todas as linhas neste caso (obviamente ^C
é eu matando o processo):
$ tail -n 3 -f log
13th line
14th line
15th line
^C
$ tail -n 3 -f log | grep --color=never 'line'
13th line
14th line
15th line
^C
$ echo $COLUMNS
100
$ tail -n 3 -f log | grep --color=never 'line' | cut -c -$COLUMNS
^C
Tenha em atenção que este problema ocorre apenas com tail -f
(ou tailf
), grep
e cut
combinado . Se eu não usar grep
no meio ou cut
no final do canal, não haverá linha faltando. Se eu substituir tail -f
por tail
ou cat
, não há problema. Você pode ver todos os casos possíveis em este exemplo mais longo .
Estou no Ubuntu 13.04, GNU coreutils ( tail
, cut
) versão 8.20 e GNU grep 2.14.