我正在寻找一种方法来解析 iostat 文件并获取时间和 iowait。我的文件如下所示:
Linux OSWbb v7.3.3
zzz ***Wed Jul 20 19:00:08 EDT 2016
avg-cpu: %user %nice %system %iowait %steal %idle
49.62 0.00 2.92 13.71 0.00 33.76
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 15.00 2.00 8.00 8.00 92.00 20.00 0.02 2.40 1.40 1.40
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
zzz ***Thu Jul 20 19:01:09 EDT 2016
avg-cpu: %user %nice %system %iowait %steal %idle
10.33 0.00 7.81 20.26 0.00 61.59
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 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
zzz ***Thu Jul 20 19:02:09 EDT 2016
avg-cpu: %user %nice %system %iowait %steal %idle
10.33 0.00 7.81 20.26 0.00 61.59
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 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
我希望从第一行(zzz)获取时间并在多个文件中返回 %iowait 。任何建议,将不胜感激。谢谢
答案1
你可以使用awk
.选择一种模式来选择所需的行,然后提取字段。例如
awk '
/:[0-9][0-9]:/ { time=$5 }
/%iowait/ { getline; iowait=$4; print time, iowait }
'
这与 的行匹配:<two digits>:
并保留字段 5。当它与 匹配的行时%iowait
,它会读取下一行,并保留字段 4。