2011-05-04 49 views
0

我刚刚得知ifstat显示网络使用情况,以下命令给出我想要在控制台屏幕上ifstat记录带宽使用

/usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2}' 

我想输出到一个文件,这样我可以使用JavaScript库绘制这些值..

,但我似乎无法输出日志到一个文件

/usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2}' > bandwidth.txt 

bandwidth.txt是空

有人可以告诉我如何登录网络带宽使用到一个文件中(collectl似乎是有趣的,但不能找出得到uplaod和下载数据)

回答

2

AWK是缓冲输出。通常,当stdout是终端时,大多数程序使用行缓冲,但当stdout不是终端时切换到更大的缓冲区大小,并且awk也不例外。如果你长时间运行你的命令,你最终会看到随着缓冲区填满并被刷新,文件大小会以4096左右的大小增长(可能或多或少)。

要强制awk的每一行后刷新其缓冲区无论标准输出是否是一个终端,添加一个fflush()命令:

/usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2; fflush()}' > bandwidth.txt 
+0

的伟大工程TKS,并了解fflush一个新的东西() – Linus 2011-05-04 06:38:09