使用 awk 解析 iostat 输出
parse iostat output using awk
我正在尝试使用 awk 从 read 行过滤参数 avgserv 的输出。
我的 iostat 命令的默认输出:iostat -D hdisk0
如下:
bash-4.4$ iostat -D hdisk0
System configuration: lcpu=32 drives=9 paths=126 vdisks=0
hdisk0 xfer: %tm_act bps tps bread bwrtn
0.0 3.0K 0.1 98.3 2.9K
read: rps avgserv minserv maxserv timeouts fails
0.0 0.8 0.0 0.0 0 0
write: wps avgserv minserv maxserv timeouts fails
0.1 2.2 0.0 0.0 0 0
queue: avgtime mintime maxtime avgwqsz avgsqsz sqfull
0.0 0.0 0.0 0.0 0.0 0.0
--------------------------------------------------------------------------------
使用:iostat -D hdisk0 | awk '/avgserv/'
我设法打印了匹配的行:avgserv
bash-4.4$ iostat -D hdisk0 | awk '/avgserv/'
read: rps avgserv minserv maxserv timeouts fails
write: wps avgserv minserv maxserv timeouts fails
但是,
首先,我只是 returning Headers,没有实际值。
其次,
我需要 return avgserv 参数,仅用于 read 行。不适用于写行。
我的最终输出应该只包含 avgserv 参数的值,并且只包含 read 行:
0.8
经过一番挖掘,
我设法 return 只有 avgserv 参数使用:iostat -D hdisk0 | awk '/avgserv/ {print }'
但是,
我得到了两条线(读和写)所需的参数,但又没有实际值。
能否请您尝试以下。
your_command |
awk '
/avgserv/ && /read/{
found=1
next
}
found{
print
found=""
}'
一种线性形式的解:
your_command | awk '/avgserv/ && /read/{found=1;next} found{print ;found=""}'
说明:为以上代码添加说明。
your_command | ##Sending your command output as standard input to awk command.
awk ' ##Starting awk command from here.
/avgserv/ && /read/{ ##Checking condition if a line has string avgserv AND read then do following.
found=1 ##Setting variable found value to 1 here.
next ##next will skip all further statements from here.
} ##Closing BLOCK for above condition here.
found{ ##Checking condition if found is NOT NULL then do following.
print ##Printing 2nd field here.
found="" ##Nullifying variable found here.
}' ##Closing BLOCK for found condition here.
从对面短抓:
$ iostat -D hdisk0 | awk '/write: +.*avgserv/{ print v; exit }{ v= }'
0.8
我正在尝试使用 awk 从 read 行过滤参数 avgserv 的输出。
我的 iostat 命令的默认输出:iostat -D hdisk0
如下:
bash-4.4$ iostat -D hdisk0
System configuration: lcpu=32 drives=9 paths=126 vdisks=0
hdisk0 xfer: %tm_act bps tps bread bwrtn
0.0 3.0K 0.1 98.3 2.9K
read: rps avgserv minserv maxserv timeouts fails
0.0 0.8 0.0 0.0 0 0
write: wps avgserv minserv maxserv timeouts fails
0.1 2.2 0.0 0.0 0 0
queue: avgtime mintime maxtime avgwqsz avgsqsz sqfull
0.0 0.0 0.0 0.0 0.0 0.0
--------------------------------------------------------------------------------
使用:iostat -D hdisk0 | awk '/avgserv/'
我设法打印了匹配的行:avgserv
bash-4.4$ iostat -D hdisk0 | awk '/avgserv/'
read: rps avgserv minserv maxserv timeouts fails
write: wps avgserv minserv maxserv timeouts fails
但是,
首先,我只是 returning Headers,没有实际值。
其次, 我需要 return avgserv 参数,仅用于 read 行。不适用于写行。
我的最终输出应该只包含 avgserv 参数的值,并且只包含 read 行:
0.8
经过一番挖掘,
我设法 return 只有 avgserv 参数使用:iostat -D hdisk0 | awk '/avgserv/ {print }'
但是, 我得到了两条线(读和写)所需的参数,但又没有实际值。
能否请您尝试以下。
your_command |
awk '
/avgserv/ && /read/{
found=1
next
}
found{
print
found=""
}'
一种线性形式的解:
your_command | awk '/avgserv/ && /read/{found=1;next} found{print ;found=""}'
说明:为以上代码添加说明。
your_command | ##Sending your command output as standard input to awk command.
awk ' ##Starting awk command from here.
/avgserv/ && /read/{ ##Checking condition if a line has string avgserv AND read then do following.
found=1 ##Setting variable found value to 1 here.
next ##next will skip all further statements from here.
} ##Closing BLOCK for above condition here.
found{ ##Checking condition if found is NOT NULL then do following.
print ##Printing 2nd field here.
found="" ##Nullifying variable found here.
}' ##Closing BLOCK for found condition here.
从对面短抓:
$ iostat -D hdisk0 | awk '/write: +.*avgserv/{ print v; exit }{ v= }'
0.8