Como capturar uma saída de programa de uma linha em mudança?

0

Um programa gera várias linhas de dados para a mesma linha em uma ordem pontual, sobrescrevendo a linha em cada linha de gravação. Como posso capturar todas as suas linhas de saída e gravá-las em um arquivo separado por novas linhas? O redirecionamento regular não faria isso.

    
por elig 10.04.2018 / 16:50

1 resposta

2

Supondo que isso seja feito usando \r , que retorna o cursor para o início da linha atual sem passar para a próxima linha, e que o programa em questão está enviando sua saída para sua saída padrão, convertendo todos os \r caracteres na saída do programa para \n produzirá o resultado desejado:

yourprogram | tr '\r' '\n' > logfile

Veja a diferença entre

printf "Hello\rworld\n"

e

printf "Hello\rworld\n" | tr '\r' '\n'

Note que sem isso, redirecionando para um arquivo de log irá armazenar toda a saída no arquivo; você poderá visualizá-lo visualizando o arquivo usando less em vez de cat . ( less mostrará \r como ^M , sem sobrescrever a linha anterior.)

Se o programa estiver escrevendo diretamente para o terminal, isso não ajudará. Nesse caso, você precisará usar um programa capaz de capturar toda a saída do terminal também; Um exemplo é script :

script -c yourprogram logfile

iniciará o programa e capturará toda a sua saída para logfile . Você precisará processar os caracteres especiais no arquivo de log para entender - less irá ajudá-lo (ou qualquer editor razoável).

    
por 10.04.2018 / 16:54