awk Lösung gesucht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
whisper
Beiträge: 3373
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

awk Lösung gesucht

Beitrag von whisper » 07.01.2020 19:17:47

Ich bin ein wenig raus aus awk Scripting.
Ich möchte eine Prozessliste ps -ef --sort=uid
so aufbereiten, dass die Anzahl für jeden User und oder auch nach Prozessnamen berechnet und ausgegeben wird.
Mein Ansatz ist

Code: Alles auswählen

ps -ef --sort=uid|awk '{for (i=1;i<NF;i++) anzahl[$i]++}{printf "%s Anzahl=%d\n", $1,anzahl[$i]}'
Was nicht funktioniert und ich nicht sehe, warum nicht.
Kann mir jemand aufs Fahrrad helfen?
Das Ganze ist zwecks Monitoring auf dem Server gedacht.
Wird natürlich gebührend gefeiert und veröffentlicht ;-)


Also so z.B. sollte das Ergebnis sein

Code: Alles auswählen

postgres  Anzahl=30
tcat          Anzahl=5
vmail       Anzahl=3
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: awk Lösung gesucht

Beitrag von ThorstenS » 07.01.2020 20:29:28

Die Holzhammermethode, die ich nur poste, um bei dem Thread auf dem Laufenden zu sein ;-)

Code: Alles auswählen

ps -eo user=|sort|uniq -c| awk '{print $NF,"Anzahl="$1}' | sort -t= -nr -k2
Eine elegantere Lösung von https://unix.stackexchange.com/question ... ux-command

Code: Alles auswählen

ps aux | awk 'NR>1{tot[$1]++;}END{for(id in tot)printf "%s Anzahl=%s\n",id,tot[id]}' | sort -t= -nr -k2

Benutzeravatar
whisper
Beiträge: 3373
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: awk Lösung gesucht

Beitrag von whisper » 07.01.2020 21:34:19

Sehr schön, danke dir.
Ich werde dann morgen damit mal weiter arbeiten und dann meine Idee, die ich damit verfolge beschreiben.
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Antworten