我正在尝试处理 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}'