2014-02-21 40 views
1

對於基準腳本,我需要在稍微操作後提取iowait%。使用top和awk獲取iowait

現在,我覺得這是最好的方式: IOWAIT = top -bn2 | awk '$1~/Cpu/ {print $6}' | sed -n '2p' | tr -d '%wa,'

正確的輸出是一樣的東西2.1:

首先,如果我沒有精確的「-bn2」,我不不知道爲什麼,如果我只拍攝一次,總是0.1%。所以,我把捕獲兩個時間,然後我awk來獲得IOWAIT領域的話,我的sed的第二行,然後我刪除「%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」?

如果有人有最好的方法來做我想要做的事情,我當然非常樂意提出建議!

感謝

回答

3

2的方式來做到這一點。你不說,但我相信你是在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]}}' 
0

All in one的

top -bn2 | awk '$1~/Cpu/&&NR==2{for (i=1;i<=NF;i++)if ($i~/%wa/) {sub(/%wa,/,X,$i);print $i}}' 
+0

嗨,感謝您的幫助呢! 當我嘗試你的建議時,我沒有得到任何結果,因爲我不是awk常規也沒有bash,所以我絕對不能調試它:( – Brice

1

怎麼樣與grep單獨:

top -bn2 | grep -o -E "[[:digit:]]*.[[:digit:]]%wa" | tr -d '%wa' 
+0

我接受了bazzargh的答案,它與我原來的問題更相關。但是,我會繼續你的解決方案(通過添加一個sed來選擇第二行),因爲它是我完全理解的那個!再次感謝你們兩個人(並且對不起,我不能爲你的答案投票) – Brice

+0

我投你一票,公平的。 – bazzargh