对于基准测试脚本,我需要在稍作操作后立即提取 iowait %。
目前,我发现最好的方法是:IOWAIT= top -bn2 | awk '$1~/Cpu/ {print $6}' | sed -n '2p' | tr -d '%wa,'
正确的输出类似于 2.1:
首先,如果我没有精确"-bn2",我不知道为什么,如果我只捕获 0.1 次,它总是 1%。所以我捕获了两次,然后我尴尬地获取iowait字段,然后我选择了第二行,然后删除了" %wa"
仅供参考,这是top -bn2 | grep Cpu
的输出
Cpu(s): 2.8%us, 0.4%sy, 0.0%ni, 96.6%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st<br>
Cpu(s): 0.2%us, 2.9%sy, 0.0%ni, 87.1%id, 9.5%wa, 0.0%hi, 0.3%si, 0.0%st
我的问题如下:当我在 100.0% 时(例如空闲)获得一列时,它会移动列号,所以我的 awk 不再工作,我得到"0.0%hi"字段。
我的问题如下:
-如何告诉awk使用"%wa"列?
如果有人对我想做的事情有最好的方法,我当然非常愿意接受建议!
谢谢
方法。你没有说,但我认为你在 linux 上(顶级语法在 osx 上不起作用),所以这应该适用于 iostat:
iostat -c|awk '/^ /{print $4}'
或带顶部:
top -bn2| awk -F"," '/Cpu/{if(p==0){p=1}else{split($5,a,"%");print a[1]}}'
单独使用 grep 怎么样:
top -bn2 | grep -o -E "[[:digit:]]*.[[:digit:]]%wa" | tr -d '%wa'
多合一
top -bn2 | awk '$1~/Cpu/&&NR==2{for (i=1;i<=NF;i++)if ($i~/%wa/) {sub(/%wa,/,X,$i);print $i}}'