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