2017-02-17 63 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