パイプを検出して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}'