Соберите информацию использования задания о кластере

[12163] [1185717]-i[1185718] делает регистр поиска нечувствительным, и я добавил [1185719]([1185720] в конце действия [1185721]-[1185722], потому что кажется, что у всех вещей, которые вы ожидаете увидеть, есть родитель в конце, но вы можете просто пропустить это. [12164] Для протокола, это самое простое использование [1185723] grep[1185724], которое вы найдете; чтение man-страницы показало бы это решение очень быстро.[1185225].
2
20.09.2014, 01:52
2 ответа

Первое, что нужно сделать, это удалить ненужные строки из вывода showq -r, i. e. строки, которые говорят об активных заданиях и т.д. ..что можно сделать с помощью showq -r | sed '1,2d' |sed '$d', или можно использовать grep с регулярным выражением, которое описывает часть строки данных - e. g. grep "----" в этом случае может сработать, если значение EFFIC всегда ----. Как только у вас есть файл, содержащий только строки данных, вы используете ассоциативные массивы в awk для выполнения остальной магии.

#!/bin/awk

{ 
  proc_count[$7] = proc_count[$7] + $10;        
  if ($10 > 1) { multi_proc[$7]++; } else { single_proc[$7]++;  }
}
END { 
  for (foo in proc_count) { print foo, proc_count[foo], multi_proc[foo], single_proc[foo] }
}

Если вы запустите вышеприведенный скрипт, вы заметите, что для user_z ничего не отображается при подсчете последовательного процессора. Это потому, что я пытался сохранить строки и не напечатал там 0. Я оставлю это на ваше усмотрение, чтобы вы добавили проверку на ошибку и притворились, что выводится.

0
27.01.2020, 22:58

Сначала сохраните следующий скрипт и chmod +x к нему. Допустим, назовём его job_processor.awk:

#!/usr/bin/gawk  -f
## $7 username
## $8 groupname
## $10 procs
{
if ( $10 == 1 )
    printf ("username: %s and groupname: %s are serial!\n",$7,$8);
else if  ( $10 > 1 )
    printf ("username: %s and groupname: %s are parallel!\n",$7,$8);



printf ("username: %s and groupname: %s with  procs: %d!\n",$7,$8,$10);
}

нужно использовать следующий формат:

cat jobs |./job_process.awk |sed '1,2d' |sed '$d'

Вывод:

username: user_X and groupname: group_A are parallel!
username: user_X and groupname: group_A with  procs: 8!
username: user_Y and groupname: group_B are parallel!
username: user_Y and groupname: group_B with  procs: 16!
username: user_Y and groupname: group_B are serial!
username: user_Y and groupname: group_B with  procs: 1!
username: user_X and groupname: group_A are serial!
username: user_X and groupname: group_A with  procs: 1!
username: user_X and groupname: group_A are parallel!
username: user_X and groupname: group_A with  procs: 2!
username: user_Z and groupname: group_A are parallel!
username: user_Z and groupname: group_A with  procs: 4!
0
27.01.2020, 22:58

Теги

Похожие вопросы