2006年12月13日星期三

利用sed处理好看的报表


前阵子做性能测试的时候,系统工程师有个要求,所有的性能测试项目提供一份vmstat的结果作为参考,最好能做出性能的曲线. 做曲线这么艰巨任务就只能由Excel去完成肋,我们所要做的就是把vmstat的结果输出为一个标准的格式文件,步骤如下:

1. 首先利用vmstat -n 5 10 > vmstat.csv把结果输出到一个文本文件中. (不过solaris好像没有-n :) ,只能自己想办法去掉)
2. 利用利器sed把其中的第一个空格去掉,命令如下:
:1,$s/^ //
我尝试了N次,都没能成功,居然把行首的^给忘记了,自责中...
3. 利用sed把其中所有的空格替换成, 这样csv格式就可以直接被打开,利用如下的命令:
:1,$s/ \+//g
这个命令也有一段来历,刚开始尝试的时候用的不是+而是*,结果每次都把后面的所有内容都替掉了,后来在伟大的Grant同学指点下(一个冰淇淋换来的)用转义后的+解决. 不过为什么*不用转义,而+需要转义一直表示不解,直到看了如下解释:

[grant@autotest16 test]$ man grep

……………………………

In basic regular expressions the metacharacters ?, +, {, |, (, and )

lose their special meaning; instead use the backslashed versions \?,

\+, \{, \|, \(, and \).

……………………………


4. 把替换好的格式文件,传到Windows,然后用Excel打开,并通过简单的操作,得到如下漂亮的图案.


4 Comments:

天行健,君子当自强不息 said...

想在生成的文件中把时间戳也加上,怎么做聂?

就是每次vmstat数据都有记录时间!

匿名 said...

您好!请问您将空格替换成逗号的脚本是如何写的,我用awk将空格替换成逗号后用Excel打开还是不行。您能举个实例吗?

天行健,君子当自强不息 said...

carson,
你好,首先感谢你的关注,针对你的问题地回答是:
1,空格替换成逗号的命令是:
:1,$s/ \+/,/g
你只需要vi打开你的文件,然后在命令模式下执行上述命令即可完成。
2,用Excel打开的前提是:
你需要把该文件另存为.csv格式即可,比如:cp XXX.log XXX.csv.

匿名 said...

多谢了~~