Como processar o progresso em tempo real do dd?

1

Estou tentando processar o progresso em tempo real do dd, que, com o reconhecimento de pipes, deve ser feito por meio de:

gzcat "$input" | dd bs="$block_size" count="$count" of="$output" 2>&1 | awk '/copied/ {print $1}'
gzcat "$input" | dd status=progress of="$output" 2>&1 | awk '/copied/ {print $1}'

mas eles não imprimem nada até o final, quando uma linha é impressa.

Eu acho que isso é porque dd não imprime nenhuma nova linha, portanto, o awk não recebe nada no stdin.

Existe alguma solução alternativa?

    
por Marcus 21.09.2017 / 10:50

1 resposta

3

Você pode alterar o separador de registros do AWK para dividir sua entrada em retornos de carro em vez de novas linhas:

gzcat "$input" | dd status=progress of="$output" 2>&1 | awk -v RS='\r' '/copied/ {print $1}'
    
por 21.09.2017 / 10:54