切断 vmstat 命令的标头?

切断 vmstat 命令的标头?

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

有没有办法获取这种数据,使用 VMSTAT 或类似的东西:

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

谢谢!
IVR Avenger

答案1

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

答案2

while sleep 1 ; do echo `date '+%Y%m%d.%H%M%S'` `vmstat | head -3 | tail -1` ; done

答案3

不确定您说的“如果我 [操纵结果],我会得到垃圾信息”是什么意思。您可以这样做:

vmstat 8 | sed '3d'

这将删除始终要求忽略的那一行。或者,如果您想要同时删除该行和标题:

vmstat 8 | sed '1,3d'

这也会处理标题。如果标题重复,你可以使用类似这样的方法:

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

在我的例子中,“memory”位于第 1 行,“free”位于第 2 行;请用您自己的适当字符串替换。

答案4

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

我不确定你的意思。如果命令不能提供你想要的输出,我想不出除了管道和格式化输出之外还能做什么。

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

$ 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

相关内容