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}'
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?