将iostat输出重定向到文件

时间:2014-02-27 14:43:44

标签: bash awk iostat

为什么iostat的输出不会在以下命令中重定向到文件:

iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization 

iostat的行为是否与其他任何命令不同?

提前谢谢

2 个答案:

答案 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),所以如果你等待足够长的时间将输出刷新到文件,它将不再是空的。