2017-02-17 21 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:04 и 4028640k.

Следующая 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 '{для (я = 1; г 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 для печать и переменная, чтобы напомнить информацию о том, как поймать и использовать ее позже, но прямой печати в вашем случае достаточно.

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

Спасибо большое :) – Mani

 Смежные вопросы

  • Нет связанных вопросов^_^