有没有办法运行 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