为什么iostat的输出不会在以下命令中重定向到文件:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
iostat的行为是否与其他任何命令不同?
提前谢谢
答案 0 :(得分:4)
看起来您需要添加一个计数来告诉流何时终止(man iostat)。您只需添加间隔:
If the interval parameter is specified without the count parameter, the iostat command generates reports continuously.
当我尝试:
iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile
6
告诉iostat
在3秒间隔的6次迭代后停止。迭代iostat
完成后,我得到一个output
文件。
或者,您可以选择一些表达式以使awk脚本退出。当我尝试:
iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2
我在output2
只得到了3行,这是有道理的,因为iostat -x
会产生大约屏幕输出的屏幕。
您还可以在每个打印周期中将awk强制为fflush(stdout)
:
iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3
然后从shell中iostat
关闭<ctrl+c>
。
答案 1 :(得分:0)
你的问题的原因是管道是缓冲的(可能是4k
),所以如果你等待足够长的时间将输出刷新到文件,它将不再是空的。