2017-02-17 64 views
0

我有要求從top的輸出中獲取特定字段。我怎麼做?使用awk在頂部命令中的字段分隔

我有

top -b -n 10 -d 10 

top - 05:16:04 up 24 days, 49 min, 2 users, load average: 0.00, 0.00, 0.00 
Tasks: 494 total, 1 running, 493 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 65971500k total, 4028640k used, 61942860k free, 420512k buffers 
Swap: 10485756k total,  0k used, 10485756k free, 1134108k cached 

我需要時間top行和Mem行使用值;在這個例子中,這是05:16:044028640k

以下awk腳本獲取我的時間字段:

{ 
    for (i=1;i<NF;i++) { 
     if($i~/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/){ 
      print $i 
     } 
    } 
} 

我如何提取使用的內存?

+0

AWK'{對於(I = 1; I Mani

+0

這是您的預期產出? –

+0

嗨,何塞,我需要05:16:04從第一行和內存使用4028640k從第三行使用Mem:對於所有實例 – Mani

回答

0

用AWK的能力來讀取的頂部

awk '$1 ~ /^top$/ { Time = $3 } 
    $1 ~ /^Mem:$/ { Mem = $4 #it include the trailing "k"} 
    END { print Time OFS Mem } 
    ' 

「場」是,默認情況下通過空間分開,以及信息固定位置(如場參考)我使用END部分,用於打印和變量提醒信息以顯示如何捕捉和使用它,但直接printf就足夠你的情況下這樣。

awk '/^top/{printf("%s",$3)}/^Mem:/{print OFS $4}' 
+0

非常感謝你:) – Mani