Shell Script для загрузки процессов Linux и отображения счетчика процессов для отдельного пользователя как «.» [закрыто]

0
04.06.2018, 17:04
2 ответа

Puede usar bash printfy trpara hacer este histograma:

while read name num; do 
    dots=$(printf "%*s" $num " " | tr " ".)
    printf "%s\t%s\n" "$name" "$dots"
done <<END
root 5
xuser 3
yuser 1
END
root   .....
xuser  ...
yuser  .
1
28.01.2020, 02:43

Usando Perl, y asumiendo que los datos están ubicados enfile:

$ perl -ne '/^(\w+)\s+(\d+)$/ && printf("%s\t%s\n", $1, "." x $2)' file
root   .....
xuser  ...
yuser  .

También puede aplicar esto en un flujo de datos:

somecommand | perl -ne '...as above...'

El script de Perl hace coincidir la cadena inicial y el número en la entrada, y genera la cadena y el número apropiado de puntos, con un carácter de tabulación en -en medio.


Con un pequeño ajuste del (anterior para poder leer la salida uniq -c, que tiene el número primero ), lo siguiente obtendría la cantidad de procesos en ejecución para cada usuario y mostraría las cuentas como puntos:

$ 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     ..........................

El comando pspodría necesitar modificaciones para generar lo correcto en Linux (Estoy usando OpenBSD aquí, pero parece que también funciona correctamente en Ubuntu ). El script de Perl ha cambiado desde la primera variación para que lea correctamente la salida uniq -cy formatea las líneas para permitir nombres de usuario de 10 o menos de longitud.

0
28.01.2020, 02:43

Теги

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