2011-09-08 107 views
2

我試圖有效地解析vmstat輸出最好在awk或sed中,它也應該在linux和hp-ux上工作。例如,我想從下面的輸出切cpu空閒%(「92」,在這種情況下):解析vmstat輸出的有效方法

$ vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- 
r b swpd free buff cache si so bi bo in cs us sy id wa 
11 0 385372 101696 61704 650716 0 1  5  9 6 12 5 2 92 0 

不幸vmstat的輸出可以在不同的Linux發行版和HP-UX不同,也列可以在變化長度並且可以以其他順序呈現。

我試着寫一些不錯的awk oneliner,但最終與Python的解決方案結束:

$ vmstat | python -c 'import sys; print dict(zip(*map(str.split, sys.stdin)[-2:])).get("id")' 
92 

你知道更好的方法來分析提到的輸出,從而獲得所需的列名的數值?

+0

python oneliners不像perl中的東西那麼吸引人:-) –

回答

4

用awk可以這樣做:

vmstat | awk '(NR==2){for(i=1;i<=NF;i++)if($i=="id"){getline; print $i}}' 

這應該得到的Linux,以及對HP-UX或任何其他標準的UNIX系統「ID」列的值。

在Linux,HP-UX和Solaris上進行測試。

0
$ vmstat | python -c 'import sys; print sys.stdin.readlines()[-1].split()[-2]' 
95