Saída de conteúdo canalizado para o arquivo e mostra o número de linhas no arquivo no stdout

2

Eu gostaria de usar tee para enviar o conteúdo de stdout e stderr para os arquivos (na verdade, acrescentar com > >(tee -a $filename) ). No entanto, em vez de ver o conteúdo anexado ao arquivo, gostaria de ter um indicador de progresso real baseado no conteúdo da canalização. Seja o número de linhas na saída no respectivo canal até o momento, ou seja, o número de caracteres ou similar.

NB: Por que eu enfatizei real acima? Porque eu estou ciente de como obter um bastão girando através de um subshell no fundo e depois matá-lo mantendo seu PID armazenado. É uma coisa legal, mas não fornece nenhuma indicação sobre o que está acontecendo - ou seja, é óleo de cobra.

btw: No começo, o arquivo de saída pode não existir, então qualquer solução com um subshell teria que considerar isso.

    
por 0xC0000022L 18.09.2014 / 15:24

2 respostas

3
my-program > >(pv -trabcN stdout > stdout) 2> >(pv -trabcN stderr > stderr)

Daria a você um progresso como:

  stderr:  123MiB 0:00:03 [42.6MiB/s] [41.1MiB/s]
  stdout:  138MiB 0:00:03 [54.2MiB/s] [46.2MiB/s]

(atual ( -r ) e média ( -a ) velocidade. -a é relativamente recente, você pode omiti-lo se sua versão de pv não o tiver).

    
por 18.09.2014 / 16:19
0

A opção -f (para sempre) do comando tail pode ser útil.

Emitindo um ponto para cada linha do arquivo:

tail -f bk2ud.log | awk '{printf(".");}'

Você pode, no entanto, estar atrás de algo mais elaborado, dependendo de suas necessidades.

    
por 18.09.2014 / 15:38