Há outra questão que é quase a mesma, mas nenhuma das sugestões da sua resposta funciona para mim:
Tubar a cauda -f no awk
Estou tentando finalizar um arquivo de log, mas quero substituir \ r por \ n antes de exibi-lo, para que o terminal não se sobrescreva, mas, em vez disso, permite que eu role pela saída.
isso funciona como suspeito:
tail -f -c 1000 "mycustom.log"
e isso também:
tail -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
nenhum desses três porém imprime nada no meu console:
tail -f -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
stdbuf -o0 tail -f -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
unbuffer tail -f -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
Para que unbuffer
seja conhecido em meu sistema, tive que instalar o pacote expect-dev
usando awk
ou mawk
não parece fazer diferença. Eu também escrevi uma variante sed
:
sed 's/\r/\n/g'
que se comporta da mesma forma para mim.
Também encontrei esta pergunta: link
Mas o parâmetro sed -u não muda nada para mim, e a construção $ '..' é identificada como erro de sintaxe pelo meu sed
- mudando para \ $ '...' é executado mas com o comando tail -f não precisa imprimir nada como qualquer outra coisa que eu tentei.
Existe mais alguma coisa que eu possa tentar? É o problema que eu uso um comando global em sed / awk? Ou talvez o problema é que o fluxo original produzido por tail -f
é apenas "uma linha", já que não há n \ n nele? Existe alguma maneira de fazer com que o sed ou o awk processem pedaços menores do que linha por linha?
Existe uma alternativa para substituir todos os \ r por \ n que possam funcionar com tail -f
?