2017-01-17 9 views
0

У меня есть более 100 серверов, которые используют разные процессоры, которые могут иметь от 2 до 16 ядер.Получите процент простоя процессора для каждого ядра из dstat для переменного количества ядер

я могу получить простоя процессора для каждого ядра с помощью следующей команды (dstat устанавливается на всех серверах):

dstat -c -C 0,1,2,3,4,5,6,7 --noheaders --nocolor --noupdate 3 1 

Я знаю, что количество ядер в момент выполнения, поэтому количество ядер, что идет в -C будет отличаться. Выход следующим образом:

-------cpu0-usage------ -------cpu1-usage------ -------cpu2-usage------ -------cpu3-usage------ -------cpu4-usage------ -------cpu5-usage------ -------cpu6-usage------ -------cpu7-usage------ 
usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq 
    5 3 90 0 0 2: 4 3 91 0 0 2: 4 3 91 0 0 2: 6 4 88 0 0 2: 2 1 96 0 0 1: 2 1 96 0 0 1: 2 1 96 0 0 1: 7 5 75 0 0 13 
    3 1 95 0 0 1: 2 1 96 0 0 0: 5 2 93 0 0 1: 2 1 96 0 0 1: 1 0 99 0 0 0: 1 1 97 0 0 1: 1 0 98 0 0 0: 23 16 16 0 0 45 

мне нужно «извлечь» значение idl для каждого ядра, из последней строки, и выплюнуть в формате разделенных запятой. Таким образом, из набора данных выше, я хочу иметь следующий вывод:

95,96,93,96,99,97,98,16

Мой Grep/AWK-Foo довольно беден, может кто-то помогает?

ответ

1
$ awk '{out=""; for (i=3;i<=NF;i+=6) out = out (i>3?",":"") $i} END{print out}' file 
95,96,93,96,99,97,98,16 
1

Используйте tail -n1, чтобы получить последнюю строку вывода. Похоже, вам нужно, чтобы каждый шестой столбец начинался с 3-го столбца? А для цикла в awk это можно сделать. А затем использовать tr изменить в новой строки запятыми, как вы хотите:

yourcommand | tail -n1 | awk '{for (i=3; i<=NF; i+=6) print $i }' | tr '\n' ',' 
+0

Спасибо, почти работает. Как начать его в третьем столбце? – Yegor

+0

Должен был 'i = 3' в команде awk. Исправлено в ответе. –

+0

Это добавит конечную запятую в конце строки и произведет вывод без завершающей строки, поэтому результат не будет текстовым «файлом» POSIX, и поэтому YMMV ответит на то, что любая последующая команда сможет с ним сделать. –