题
为什么 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>
从壳中。
其他提示
问题的原因是管道被缓冲(可能是生成的),所以如果等待足够长的输出被刷新到文件,它将不再为空。
不隶属于 StackOverflow