砍掉vmstat命令的标头?

有没有办法运行VMSTAT命令(或类似的东西),并在行中包含时间戳? 我知道我可以输出命令并操纵结果,但如果我这样做,我会得到垃圾信息; 我被告知,VMSTAT的第一行包含假数据,我基本上会得到第一行的重复列表。

有没有办法获得这种types的数据,无论是与VMSTAT或类似的:

20090826.134908 0 0 0 241832 120064 3023856 0 0 0 1 0 0 0 0 100 0 

谢谢!
IVR复仇者

 vmstat -n 1 | (while read; do echo "$(date +%Y%m%d.%H%M%S) $REPLY"; done) | tail -n +3 
 while sleep 1 ; do echo `date '+%Y%m%d.%H%M%S'` `vmstat | head -3 | tail -1` ; done 

不知道你的意思是“如果我(操纵结果),我会得到垃圾信息”。 你可以做这样的事情:

 vmstat 8 | sed '3d' 

这将删除总是被告知忽略的那条线。 或者,如果您想要删除该标题以及标题,请执行以下操作:

 vmstat 8 | sed '1,3d' 

这也将照顾头。 如果头重复,你可以使用这样的东西:

 vmstat 8 | sed '3d; /memory/d; /free/d;' 

在我的情况下,“记忆”在第一行,“自由”在第二行; 用你自己的适当的stringreplace。

这是一个快速和肮脏的解决scheme:

  while true; do date;vmstat 1 2|tail -n1; done 

顺便说一句,第一行不是假的 – 它包含自上次重新启动以来的平均值。

我知道我可以输出命令并操纵结果,但如果我这样做,我会得到垃圾信息

我不确定你的意思。 如果命令不会给你你想要的输出,我不能想到除了pipe之外的任何事情,并格式化输出。

无论如何,这会产生你想要的格式。

 $ date=`date "+%Y%m%d.%H%M%S"` && vmstat=`vmstat | tail -1` && echo $date$vmstat 20090827.175715 3 1 8 116848 121072 599320 0 0 0 4 3 6 0 0 100 0 

Sar可能更好地工作:
我会推荐sar命令,它是sysstat包的一部分。 这将默认包括时间戳,并有交换机来获取各种数据。 最基本的用法是:

 sar 1 3 #interval of 1, for a count of 3 

请参阅“man sar”获取内存和分页统计信息。

如果你使用vmstat:
如果你打算使用vmstat,一旦terminal满了,它会再次打印头(至less是我的GNU版本),所以使用-n开关来抑制这个。