grep在Linux中输出命令输出的特定段落

时间:2014-02-27 08:36:51

标签: linux grep

我正在尝试解析iostat -x 1 2命令的输出,以便从我的java应用程序监视远程计算机。

这是输出:

Linux 2.6.39-400.126.1.el5uek (abcprod.abc-en.local)         02/27/2014

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.57    0.00    0.87    0.01    0.00   96.56

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    54.24  0.35 10.64     6.95   518.97    47.89     0.01    1.06   0.19   0.21
sda1              0.00     0.00  0.00  0.00     0.00     0.00    68.40     0.00    2.08   0.94   0.00
sda2              0.00    54.23  0.35 10.64     6.94   518.97    47.89     0.01    1.06   0.19   0.21
dm-0              0.00     0.00  0.18 48.77     4.18   390.19     8.06     0.08    1.63   0.02   0.10
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00    1.06   0.18   0.00
dm-2              0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00    1.78   0.14   0.00
dm-3              0.00     0.00  0.17 16.10     2.76   128.78     8.09     0.03    2.10   0.07   0.11

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.61    0.00    3.20    0.00    0.00   85.19

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00   191.00  0.00 43.00     0.00  1872.00    43.53     0.00    0.09   0.05   0.20
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00   191.00  0.00 43.00     0.00  1872.00    43.53     0.00    0.09   0.05   0.20
dm-0              0.00     0.00  0.00 234.00     0.00  1872.00     8.00     0.00    0.02   0.01   0.20
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

我只需要输出的第二部分(从第四段开始):

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.61    0.00    3.20    0.00    0.00   85.19

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00   191.00  0.00 43.00     0.00  1872.00    43.53     0.00    0.09   0.05   0.20
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00   191.00  0.00 43.00     0.00  1872.00    43.53     0.00    0.09   0.05   0.20
dm-0              0.00     0.00  0.00 234.00     0.00  1872.00     8.00     0.00    0.02   0.01   0.20
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

2 个答案:

答案 0 :(得分:1)

如果第一段的行数固定,您可以使用sed这样的

iostat -x 1 2 | sed 'N,$!d' - 其中N是第一段

的行数

答案 1 :(得分:1)

不要如何使用grep来执行此操作,但您可以使用perl

iostat -x 1 2 | perl -e 'local $/=""; @p=<STDIN>; print @p[3,4];'

一些解释:

  1. local,请参阅perlsub

      

    local将其列出的变量修改为封闭块“{本地”,evaldo FILE - 和到该块内调用的任何子程序< / strong>即可。 local只给全局(含义包)变量赋予临时值。

  2. $/,请参阅perlvar

      

    输入记录分隔符,默认为换行符。这影响了Perl关于“线”是什么的想法。