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
答案 0 :(得分:1)
这将为您提供标题和值的第二个实例,您可以进一步限制字段并在需要时跳过标题
$ 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