ddのリアルタイム進行状況を処理する方法は?

ddのリアルタイム進行状況を処理する方法は?

パイプを検出してddのリアルタイム進行状況を処理しようとしています。以下を行う必要があります。

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

ただし、最後の行が印刷されるまで何も印刷しません。

私は改行文字が印刷されないのでこれだと思いますdd。だからawkは標準入力から何も得られません。

解決策はありますか?

ベストアンサー1

AWKのレコード区切り文字を変更して、改行ではなくキャリッジリターンに入力を分割できます。

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

おすすめ記事