Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trier une liste

8 réponses
Avatar
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.

8 réponses

Avatar
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>
Avatar
Jacques L'helgoualc'h
Le 26-01-2009, Olivier Miakinen <om+ a écrit :
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
Avatar
Dam1en
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.
Avatar
xavier
Dam1en wrote:

# 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
<http://www.xavierhumbert.net/perso/CV2.html>
Avatar
mpg
Xavier scripsit:

Dam1en wrote:

# 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/
Avatar
Stephane CHAZELAS
2009-01-27, 00:40(+01), mpg:
Xavier scripsit:

Dam1en wrote:

# 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
Avatar
Nicolas George
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.
Avatar
Jacques L'helgoualc'h
Le 27-01-2009, Stephane CHAZELAS a écrit :
2009-01-27, 00:40(+01), mpg:
Xavier scripsit:

Dam1en wrote:

# 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