解析iostat输出

时间:2013-02-19 09:44:56

标签: linux parsing sed iostat

iostat的输出就是这样:

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     2.40  0.01  3.92     0.16    25.28    12.95     0.05   12.81   6.58   2.58
sda1              0.00     0.00  0.00  0.00     0.00     0.00    25.86     0.00    6.57   5.38   0.00
sda2              0.00     2.40  0.01  3.92     0.16    25.28    12.95     0.05   12.81   6.58   2.58
sdb               0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00   30.37  20.16   0.00
VG00-LogVol00
               0.00     0.00  0.00  0.70     0.02     2.79     8.04     0.02   23.72   3.71   0.26
VG00-LogVol04
               0.00     0.00  0.00  4.31     0.03    17.26     8.01     0.07   16.74   4.32   1.87
VG00-LogVol03
               0.00     0.00  0.00  0.24     0.00     0.98     8.01     0.01   21.37   8.52   0.21
VG00-LogVol08
               0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00   14.03   2.31   0.00
VG00-LogVol01
               0.00     0.00  0.00  0.00     0.00     0.00     8.03     0.00  127.25   1.17   0.00
VG00-LogVol07
               0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00    2.42   1.72   0.00
VG00-LogVol06
               0.00     0.00  0.00  0.80     0.01     3.21     8.02     0.01   10.28   4.89   0.39
VG00-LogVol02
               0.00     0.00  0.01  0.26     0.10     1.04     8.52     0.01   52.88   6.01   0.16
VG00-LogVol05
               0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00    3.73   0.33   0.00

我尝试解析输出但是当我到达“VG00-LogVol00”,“VG00-LogVol04”时,我在解析文本时遇到问题。有没有办法使用sed删除额外的行?

谢谢

2 个答案:

答案 0 :(得分:1)

如果VG00始终存在于分割线中,您可以这样做:

sed '/VG00/ { N; s/\n// }'

使用复制/粘贴文本,我有以下对齐列(GNU sed和BSD sed):

sed '/VG00/ { N; s/\n//; s/ \{5,\}/     /; }'

输出:

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     2.40  0.01  3.92     0.16    25.28    12.95     0.05   12.81   6.58   2.58
sda1              0.00     0.00  0.00  0.00     0.00     0.00    25.86     0.00    6.57   5.38   0.00
sda2              0.00     2.40  0.01  3.92     0.16    25.28    12.95     0.05   12.81   6.58   2.58
sdb               0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00   30.37  20.16   0.00
VG00-LogVol00     0.00     0.00  0.00  0.70     0.02     2.79     8.04     0.02   23.72   3.71   0.26
VG00-LogVol04     0.00     0.00  0.00  4.31     0.03    17.26     8.01     0.07   16.74   4.32   1.87
VG00-LogVol03     0.00     0.00  0.00  0.24     0.00     0.98     8.01     0.01   21.37   8.52   0.21
VG00-LogVol08     0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00   14.03   2.31   0.00
VG00-LogVol01     0.00     0.00  0.00  0.00     0.00     0.00     8.03     0.00  127.25   1.17   0.00
VG00-LogVol07     0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00    2.42   1.72   0.00
VG00-LogVol06     0.00     0.00  0.00  0.80     0.01     3.21     8.02     0.01   10.28   4.89   0.39
VG00-LogVol02     0.00     0.00  0.01  0.26     0.10     1.04     8.52     0.01   52.88   6.01   0.16
VG00-LogVol05     0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00    3.73   0.33   0.00

答案 1 :(得分:0)

我会去

sed -e '/^\([^[:space:]]\+\)$/{N;s/\n//;}'

假设设备行没有空格。

但我也会研究影响iostat并使其产生不同输出的可能性。不过,我不知道那里的选择。