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

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

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

提前谢谢

有帮助吗?

解决方案

看起来您需要添加一个计数来告诉流何时终止( 曼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

我只得到 3 行 output2 这是有道理的,因为 iostat -x 产生大约一个屏幕的行输出到屏幕。

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

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

然后关闭 iostat 与一个 <ctrl+c> 从壳中。

其他提示

问题的原因是管道被缓冲(可能是生成的),所以如果等待足够长的输出被刷新到文件,它将不再为空。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top