1

为什么 iostat 的输出没有重定向到以下命令中的文件:

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

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

提前谢谢

4

2 回答 2

5

看起来您需要添加一个计数来告诉流何时终止(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告诉在 3 秒间隔的iostat6 次迭代后停止。迭代iostat完成后,我得到一个output文件。

或者,您可以选择一些表达式来导致 awk 脚本退出。当我尝试:

iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2

我只得到 3 行output2有意义的,因为iostat -x产生了大约相当于屏幕的输出行。

fflush(stdout)您还可以在每个打印周期中强制 awk :

iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3

然后iostat用 a <ctrl+c>from shell 关闭。

于 2014-02-27T15:12:02.807 回答
0

问题的原因是管道已缓冲(可能4k),因此如果您等待足够长的时间以将输出刷新到文件中,它将不再为空。

于 2014-02-27T15:18:38.227 回答