AWK - ayuda [Solucionado]

Iniciado por laucrisman, 26 Mayo 2010, 02:26 AM

0 Miembros y 2 Visitantes están viendo este tema.

laucrisman

Necesito obtener la Cantidad de procesos por usuario indicando en rojo el que más tiene. Si alguien me puede dar una mano desde ya muchas gracias.
Lo que pude hacer es imprimir la cantidad de procesos por usuario pero no se como comparar para saber cual es el que mas tiene
Código (bash) [Seleccionar]
for i in $(awk '{print $1}' listado_ps.txt | sort | uniq | grep -v UID); do
echo Procesos ejecutados por $i& grep $i listado_ps.txt | wc -l

leogtz

¿Qué comando utilizaste para construir el contenido del archivo de texto?

Es para hacer pruebas.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

laucrisman

 :) ps aux >listado

leogtz

Prueba esto, me funciona bien:

Código (bash) [Seleccionar]
#!/usr/bin/bash
let mayor=`ps aux | grep -i "^$USERNAME" | wc -l`
for usuario in $(ps aux | awk '{print $1}' | sort | uniq);
do
let procesos=`ps aux | grep -i "^$usuario" | awk '{print $1}' | awk -F "$usuario" '{SUM +=NF - 1} END {print SUM}'`
echo -e "Usuario : [${usuario}], procesos ${procesos}";
if [ "$procesos" -gt "$mayor" ]
then
user="$usuario"
let process="$procesos"
fi
done
echo -e "El usuario con más procesos es : ${user}\nProcesos : $process";


Usuario : [108], procesos 1
Usuario : [111], procesos 2
Usuario : [avahi], procesos 2
Usuario : [daemon], procesos 1
Usuario : [dhcp], procesos 1
Usuario : [klog], procesos 1
Usuario : [leo], procesos 61
Usuario : [root], procesos 61
Usuario : [syslog], procesos 1
Usuario : [USER], procesos 1
El usuario con más procesos es : root
Procesos : 61
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

laucrisman

Muchas Gracias! funciona perfecto , lo que me faltaría saber es si si hay alguna manera en vez de que me muestre una linea con el usuario con mas procesos que en la lista donde figuran todos los usuarios y procesos el que mas tiene aparezca en otro color
Muchas Gracias
ubuntu@ubuntu:~/Desktop$ ./pruebaforo.txt
Usuario : [102], procesos 1
Usuario : [108], procesos 2
Usuario : [avahi], procesos 2
Usuario : [daemon], procesos 1
Usuario : [root], procesos 80
Usuario : [rtkit], procesos 1
Usuario : [syslog], procesos 1
Usuario : [ubuntu], procesos 56 ( esta linea en ROJO)
Usuario : [USER], procesos 1
El usuario con m�s procesos es : ubuntu
Procesos : 56


leogtz

Código (bash) [Seleccionar]
#!/usr/bin/bash
let mayor=`ps aux | grep -i "^$USERNAME" | wc -l`
for usuario in $(ps aux | grep -vi "^root" | awk '{print $1}' | sort | uniq);
do
let procesos=`ps aux | grep -i "^$usuario" | awk '{print $1}' | awk -F "$usuario" '{SUM +=NF - 1} END {print SUM}'`
if [ "$procesos" -gt "$mayor" ]
then
user="$usuario"
let process="$procesos"
fi
done
# Ya tengo el más grande.
for usuario in $(ps aux | awk '{print $1}' | sort | uniq);
do
let procesos=`ps aux | grep -i "^$usuario" | awk '{print $1}' | awk -F "$usuario" '{SUM +=NF - 1} END {print SUM}'`
if [ "$usuario" = "$user" ]
then
echo -e "\033[40m\033[31mUsuario : [${user}], procesos ${procesos}          \033[0m";
else
echo -e "Usuario : [${usuario}], procesos ${procesos}";
fi


done
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

laucrisman

Muchisima gracias Funciona perfecto!!