Я написал плагин munin, который использует пакет slurm для мониторинга состояний заданий в кластере HPC.Я написал это на sh + awk (а не на своем обычном инструменте выбора, perl).
Сценарий работает, но мне потребовались целые годы, чтобы выяснить, как предварительно заполнить ассоциативный массив возможных состояний(некоторые / большинство могут не присутствовать в выходных сакральных, и я хочу, чтобы они по умолчанию на ноль).Google не сильно помог, и лучшее, что я мог придумать, - это использовать разбивку на строку для создания временного массива, который я затем повторил.
Я придумал это:
BEGIN {
num = split("cancelled completed completing failed nodefail pending running suspended timeout",statenames," ");
for (i=1;i<=num;i++) {
states[statenames[i]] = 0
}
}
Это работает, но кажется неуклюжим по сравнению с тем, как я сделал бы это в Perl, например:
foreach (qw(cancelled completed completing failed nodefail pending running suspended timeout)) {
$states{$_} = 0;
}
или это
%states = map {$_ => 0} qw(cancelled completed completing failed nodefail pending running suspended timeout);
мой вопрос:Есть ли способ сделать это в awk, который похож на любую из версий perl?
[отредактировано]
, чтобы уточнить, вот пример выходного сакрала, который я добавляю в awk.Обратите внимание, что единственными состояниями в этом выводе являются RUNNING, COMPLETED и CANCELED - другие не существуют (потому что они не произошли сегодня), но я все равно хочу, чтобы они были в выводе моего скрипта (в форме, используемой munin как "statename.value 0 ").
# sacct -X -P -o 'state' -n
RUNNING
RUNNING
RUNNING
RUNNING
COMPLETED
RUNNING
COMPLETED
RUNNING
COMPLETED
COMPLETED
CANCELLED by 1000
COMPLETED
[снова отредактировано]
и вот пример вывода из моего плагина munin:
# ./slurm-sacct
suspended.value 0
pending.value 0
nodefail.value 0
failed.value 0
running.value 6
completing.value 0
completed.value 5
timeout.value 0
cancelled.value 1
Сценарий запускается и делает чтоЯ хочу, я просто хотел узнать, есть ли лучший способ инициализировать ассоциативный массив.