Usando o Perl e supondo que os dados estejam localizados em file
:
$ perl -ne '/^(\w+)\s+(\d+)$/ && printf("%s\t%s\n", $1, "." x $2)' file
root .....
xuser ...
yuser .
Você também pode aplicar isso em um fluxo de dados:
somecommand | perl -ne '...as above...'
O script Perl corresponde à string inicial e ao número na entrada, e a saída da string e o número apropriado de pontos, com um caractere de tabulação entre eles.
Com um pouco de ajustes acima (para poder ler uniq -c
output, que tem o número primeiro ), o seguinte obteria o número de processos em execução para cada usuário e exibição as contagens como pontos:
$ ps -ax -o user= | sort | uniq -c | perl -ne '/^\s*(\d+)\s+(\w+)$/ && printf("%-10s%s\n", $2, "." x $1)'
_dbus .
_dhcp .
_ntp ..
_pflogd .
_slaacd ..
_smtpd .....
_smtpq .
_syslogd .
_unbound .
kk ................
root ..........................
O comando ps
pode precisar de modificação para produzir a coisa correta no Linux (estou usando o OpenBSD aqui, mas parece fazer a coisa certa no Ubuntu também). O script Perl foi alterado da primeira variação para que leia corretamente uniq -c
output e formata as linhas para permitir nomes de usuário com comprimento igual ou inferior a 10.