iostat -x不显示实际值。如果运行iostat -x 1并查看每秒的值,这是显而易见的。当我运行iostat -x 1 2时,我想我可以通过抓取精确的行和值来获得所需的值。

iostat -x 1 2 | awk '{gsub(/,/,"."); if (NR==15) printf ("%s,%s,%s,", $1, $3 ,$4); else if (NR == 18) printf ("%s,", $14);}'

从第15行给我%user、%system、%iowait,从第18行给我%sda。
不幸的是,我不能这样做,因为我有多台不同磁盘的机器。当我运行iostat -x时,sda可能在第18行、第21行或另一行。
如何运行iostat -x并仅获取第二个样本?或者我怎样才能得到我想要的关于行的值?
我想到了iostat -x 1 2 | awk '/^sda/ {print $14}'然后只得到第二个值,但是如果我采用这种方法,我需要8秒来得到我想要的所有值。
iostat -x 1 2的输出
Linux 3.10.0-327.28.3.el7.x86_64 (sth)  13/12/2016  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,70    0,00    0,23    0,09    0,00   98,98

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0,00     0,00    0,00    0,00     0,03     0,00    38,29     0,00    0,13    0,13    0,00   0,02   0,00
sda               0,01     0,18    0,23    7,52    38,37  3132,67   819,15     1,26  162,49  219,88  160,76   3,74   2,89
sdb               0,00     0,00    0,62    0,00    78,93     0,00   255,56     0,00    0,40    0,40    0,00   0,24   0,01
dm-0              0,00     0,00    1,02    2,10    21,16   156,62   113,89     0,11   34,80    4,22   49,58   2,13   0,66
dm-1              0,00     0,00    0,00    0,00     0,01     0,00    59,16     0,00    0,54    0,36    3,15   0,42   0,00
dm-2              0,00     0,00    0,01    0,01     0,13     0,76    84,61     0,00  177,30    0,58  287,55  28,81   0,06

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,03    0,00    0,03    0,00    0,00   99,94

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
sda               0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
sdb               0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
dm-0              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
dm-1              0,00     0,00    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   0,00   0,00

最佳答案

这将为您提供头和值的第二个实例,您可以进一步限制字段,如果需要,可以跳过头

$ iostat -x 1 2 | awk '/^avg-cpu/  {c++; a=4}
                       c==2 && a && a--;
                       c==2 && /^sdb/'

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.31    0.00    0.22    0.00    0.00   98.47

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sdb              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

这一个,没有标题,只需选择要打印的字段(而不是$0)。
$ iostat -x 1 2 | awk '/^avg-cpu/        {c++; a=2}
                       c==2 && a && !--a {print $0}
                       c==2 && /^sdb/    {print $0}'

           1.78    0.00    0.78    0.03    0.00   97.41
sdb              0.00     0.00  0.00 831.00     0.00  6648.00     8.00     0.72    0.87   0.01   0.60

10-06 01:50