为什么 iostat 的输出没有重定向到以下命令中的文件:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
iostat 的行为是否与任何其他命令不同?
提前谢谢
看起来您需要添加一个计数来告诉流何时终止(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 秒间隔的iostat
6 次迭代后停止。迭代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 关闭。
问题的原因是管道已缓冲(可能4k
),因此如果您等待足够长的时间以将输出刷新到文件中,它将不再为空。