A primeira coisa que você precisa fazer é remover as linhas indesejadas da saída de showq -r , ou seja, linhas que dizem tarefas ativas, etc., que podem ser feitas usando showq -r | sed '1,2d' |sed '$d' , ou você pode usar grep com uma expressão regular que descreve parte da linha de dados - por exemplo grep "----" neste caso pode funcionar se o valor de EFFIC for sempre ---- . Quando você tiver um arquivo com apenas linhas de dados, use associative arrays in awk fazer o resto da magia.
#!/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] }
}
Se você executar o script acima, você notará que nada é exibido para a contagem do processador serial de user_z . Isso porque eu estava tentando salvar linhas e não imprimi 0 . Vou deixar que você adicione a verificação de erros e prettifique a saída.