trier une liste

Le
Dam1en
Bonjour

Pour maintenir un système, j'aimerais pouvoir comptabiliser le nombre de
processus occupés par utilisateurs.

Si je fais
# ps xa | grep programme

j'obtiens (résultat très simplifié) :

programme -O utilisateurA
programme -O utilisateurA
programme -O utilisateurB

J'aurais besoin de comptabiliser combien de fois est-ce que l'utilisateurA
est cité, idem pour les autres.

Précision, je n'ai pas les noms des utilisateurs (ils sont très nombreux),
je sais juste qu'il est toujours indiqué après l'expression "-O" et qu'il
n'y a pas d'espaces ni caractères spéciaux dans le nom d'utilisateur.
En revanche, dans la sortie de la commande "ps xa", il y a parfois des
caractères spéciaux, notement des points d'interrogation.

L'idée serait d'obtenir dans un fichier texte quelque chose ressemblant à
ceci :

UtilisateurA: X processus
UtilisateurB: Y processus

Merci d'avance pour votre aide.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #18490571
Le 26/01/2009 17:56, Dam1en a écrit :

Si je fais
# ps xa | grep programme

j'obtiens (résultat très simplifié) :

programme -O utilisateurA
programme -O utilisateurA
programme -O utilisateurB

J'aurais besoin de comptabiliser combien de fois est-ce que l'utilisateurA
est cité, idem pour les autres.



Peut-être :
# ps xa | grep programme | uniq -c -f <nombre de champs>

Ou bien, si les lignes ne sont pas triées par utilisateur :
# ps xa | grep programme | sort <options> | uniq -c -f <nb champs>
Jacques L'helgoualc'h
Le #18493161
Le 26-01-2009, Olivier Miakinen
Le 26/01/2009 17:56, Dam1en a écrit :

Si je fais
# ps xa | grep programme

j'obtiens (résultat très simplifié) :

programme -O utilisateurA
programme -O utilisateurA
programme -O utilisateurB

J'aurais besoin de comptabiliser combien de fois est-ce que l'utilisateurA
est cité, idem pour les autres.



Peut-être :
# ps xa | grep programme | uniq -c -f <nombre de champs>

Ou bien, si les lignes ne sont pas triées par utilisateur :
# ps xa | grep programme | sort <options> | uniq -c -f <nb champs>



Si l'utilisateur apparaît en fin de ligne,

ps -Ao args |
awk '$1=="programme"{nb[$NF]++}
END{for(k in nb){print nb[k],k}}'

--
Jacques L'helgoualc'h
Dam1en
Le #18493691
Olivier Miakinen wrote:

Le 26/01/2009 17:56, Dam1en a écrit :

Si je fais
# ps xa | grep programme

j'obtiens (résultat très simplifié) :

programme -O utilisateurA
programme -O utilisateurA
programme -O utilisateurB

J'aurais besoin de comptabiliser combien de fois est-ce que
l'utilisateurA est cité, idem pour les autres.



Peut-être :
# ps xa | grep programme | uniq -c -f <nombre de champs>

Ou bien, si les lignes ne sont pas triées par utilisateur :
# ps xa | grep programme | sort <options> | uniq -c -f <nb champs>



Bonjour et merci à vous deux pour les pistes

Le champs utilisateur étant toujours en 19e position, j'en arrive là :

# ps xa | grep programme | awk '{ print $19 }' | sort | uniq -c

Je ne sais pas si c'est optimal mais ça fonctionne bien.
xavier
Le #18494141
Dam1en
# ps xa | grep programme | awk '{ print $19 }' | sort | uniq -c



N'oublie pas # ps xa | grep programme | grep -v grep | etc...

sinon ton grep va se catcher lui-même.

--
XAv
Disponible au 1/9/2009
mpg
Le #18494661
Xavier scripsit:

Dam1en
# ps xa | grep programme | awk '{ print $19 }' | sort | uniq -c



N'oublie pas # ps xa | grep programme | grep -v grep | etc...

sinon ton grep va se catcher lui-même.



Sinon pour ça il ya aussi l'astuce

ps xa | grep [p]rogramme | etc.

qui consomme un processus de moins.


--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Stephane CHAZELAS
Le #18495591
2009-01-27, 00:40(+01), mpg:
Xavier scripsit:

Dam1en
# ps xa | grep programme | awk '{ print $19 }' | sort | uniq -c



N'oublie pas # ps xa | grep programme | grep -v grep | etc...

sinon ton grep va se catcher lui-même.



Sinon pour ça il ya aussi l'astuce

ps xa | grep [p]rogramme | etc.

qui consomme un processus de moins.


[...]

Mais s'il y a un fichier dont le nom contient "programme" dans
le repertoire courant, ca ne marchera pas. Utilser zsh evite ce
genre d'erreur.

ps -eo args= | awk '$1 ~ /programmme/ {print $3}' | sort | uniq -c

ps -eo args= | awk '$1 ~ /programmme/ {n[$3]++}
ENF {for (i in n) print i, n[i]}'


--
Stéphane
Nicolas George
Le #18496101
Stephane CHAZELAS wrote in message
Mais s'il y a un fichier dont le nom contient "programme" dans
le repertoire courant, ca ne marchera pas.



Il suffit d'écrire « '[p]rogramme' » pour éviter ça. Ce qui est de toutes
façons une bonne idée.
Jacques L'helgoualc'h
Le #18496361
Le 27-01-2009, Stephane CHAZELAS a écrit :
2009-01-27, 00:40(+01), mpg:
Xavier scripsit:

Dam1en
# ps xa | grep programme | awk '{ print $19 }' | sort | uniq -c



N'oublie pas # ps xa | grep programme | grep -v grep | etc...

sinon ton grep va se catcher lui-même.



Sinon pour ça il ya aussi l'astuce

ps xa | grep [p]rogramme | etc.

qui consomme un processus de moins.


[...]

Mais s'il y a un fichier dont le nom contient "programme" dans
le repertoire courant, ca ne marchera pas. Utilser zsh evite ce
genre d'erreur.

ps -eo args= | awk '$1 ~ /programmme/ {print $3}' | sort | uniq -c

ps -eo args= | awk '$1 ~ /programmme/ {n[$3]++}
ENF {for (i in n) print i, n[i]}'



...mais il reste le cas des « faux-programmes » qui sont comptés aussi :

awk '$1 ~ /(^|/)programme$/ ... '

ou

awk '$1 ~ /^(/chemin/complet/)?programme$/ ... '

--
Jacques L'helgoualc'h
Publicité
Poster une réponse
Anonyme