• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

mit "grep" die ausgabe gruppieren

d00s

Newbie
Hey

ich habe folgendes Problem:

Meine Datei die ich via grep gruppieren möchte sieht so aus:

Code:
Fri Mar 12 05:50:27 2004: Auth: Login OK: [12_4041_dornbirn] (from nas cisco/S27)
Fri Mar 12 05:53:16 2004: Auth: Login OK: [27_5517_hausfeld] (from nas cisco/S1)
Fri Mar 12 05:53:30 2004: Auth: Login OK: [12_4041_dornbirn] (from nas cisco/S15)
Fri Mar 12 05:53:33 2004: Auth: Login OK: [27_5517_hausfeld] (from nas cisco/S3)
Fri Mar 12 05:53:49 2004: Auth: Login OK: [12_4041_dornbirn] (from nas cisco/S28)
Fri Mar 12 05:56:36 2004: Auth: Login OK: [27_5517_hausfeld] (from nas cisco/S26)
Fri Mar 12 05:56:53 2004: Auth: Login OK: [12_4041_dornbirn] (from nas cisco/S7)
Fri Mar 12 05:56:53 2004: Auth: Login OK: [27_5517_hausfeld] (from nas cisco/S18)
Fri Mar 12 05:57:11 2004: Auth: Login OK: [12_4041_dornbirn] (from nas cisco/S11)
Fri Mar 12 06:03:37 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S9)
Fri Mar 12 06:03:54 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S10)
Fri Mar 12 06:04:11 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S16)
Fri Mar 12 06:04:28 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S8)
Fri Mar 12 06:04:45 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S21)
Fri Mar 12 06:05:02 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S5)
Fri Mar 12 06:07:02 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S23)
Fri Mar 12 06:07:20 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S22)
Fri Mar 12 06:07:37 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S14)
Fri Mar 12 06:07:54 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S17)
Fri Mar 12 06:08:11 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S24)
Fri Mar 12 06:08:28 2004: Auth: Login OK: [25_69_velden] (from nas cisco/S12)
Fri Mar 12 06:11:37 2004: Auth: Login OK: [19_6501_strassgang] (from nas cisco/S25)
Fri Mar 12 06:11:49 2004: Auth: Login OK: [19_6501_strassgang] (from nas cisco/S20)
Fri Mar 12 06:14:54 2004: Auth: Login OK: [19_6501_strassgang] (from nas cisco/S6)
Fri Mar 12 06:15:06 2004: Auth: Login OK: [19_6501_strassgang] (from nas cisco/S4)
Fri Mar 12 06:17:58 2004: Auth: Login OK: [24_9555_elixhausen] (from nas cisco/S13)
Fri Mar 12 06:18:11 2004: Auth: Login OK: [19_6501_strassgang] (from nas cisco/S19)
Fri Mar 12 06:18:15 2004: Auth: Login OK: [24_9555_elixhausen] (from nas cisco/S2)
Fri Mar 12 06:18:22 2004: Auth: Login OK: [19_6501_strassgang] (from nas cisco/S27)
Fri Mar 12 06:19:17 2004: Auth: Login OK: [19_6625_obersaifen] (from nas cisco/S1)
Fri Mar 12 06:19:29 2004: Auth: Login OK: [19_6625_obersaifen] (from nas cisco/S15)
Fri Mar 12 06:20:57 2004: Auth: Login OK: [25_66_gailtalmarkt] (from nas cisco/S3)

Nun ist mein Problem das ich wissen muss bzw ausgeben will, wieviele verschiedene User es gibt und wie diese User heissen!
Doch wie mach ich das ?
mit grep (aber welche parameter für die gruppierung) oder gibt es da einen eigenen gruppierungs befehl?

Danke im Vorraus
 

nobbiew

Hacker
Ich weiß zwar nicht, wie es mit grep geht aber
Code:
cat file |perl -e 'while (<>){ m/\[([^\[\]]+)\]/; $seen{$1}++}; foreach ( sort keys %seen ) {print "$_ $seen{$_} mal\n"}'
sollte gehen
 
OP
D

d00s

Newbie
ah super danke !

@grep
sorry, ich hatte gedacht das es mit grep auch irgendwie funktioniert ! :)

Vielen Danke nochmals !!

^^ Thread wär zum closen ^^
 
OP
D

d00s

Newbie
Hey leute hab noch schnell eine frage !

Mit was für einem Befehl kann ich nur gewisse Spalten aus einer Datei ausgeben (trennzeichen ist ";")

Danke !
 

gaw

Hacker
Wenn ich die Datei richtig interpretiere sollen die unterschiedlichen Benutzer ausgegeben werden, also doppelte Einträge vermieden werden. Ein interessantes Problem, ich würde es vielleicht so handhaben:

>echo -e "Benutzerliste:\n `cat datei | cut -d" " -f9 | cut -d"_" -f3 | tr -d "]" | sort | uniq`"

Oder wenn sie gezäht werden sollen:

> echo "Es sind `cat datei | cut -d" " -f9 | cut -d"_" -f3 " | sort | uniq | wc -l `" verschiedene Benutzer aufgeführt.

Willst du dagegen zählen wieviele Einträge der Benutzer velden in die datei produzierte geht es so:

> echo "Benutzer velden hat `cat datei | grep "velden" | wc -l` Einträge"

Das ganze läßt sich im script zu einer Reportdatei kombinieren:

-------------------------report----------------------------
#!/bin/sh

cat $1 | cut -d" " -f9 | cut -d"_" -f3 | tr -d "]" | sort | uniq > /tmp/benutzerliste

echo -e "Auswertungen der Datei $1:\n"
echo -e "Es gab `cat $1 | wc -l` Anmeldungen am System"
echo -e "Es haben sich insgesamt `cat /tmp/benutzerliste | wc -l` verschiedene Benutzer angemeldet:\n"
echo -e "Name:\t\tAnzahl der Anmeldungen:\n"
cat /tmp/benutzerliste | while read i;
do
fm="$i"
if [ `echo $fm | wc -c` -lt 8 ]; then
fm="$fm\t"
fi
echo -e "$fm\t`cat $1 | grep $i | wc -l`"
done

rm /tmp/benutzerliste


-------------------------------------------------------------
Die if Abfrage in der while do schleife dient nur zu Formatierungszwecken. Vielleicht gibt es da auch bessere Lösungen.

>report logdatei

erzeugt etwa folgende Art von output:
------------------------------------------------------------
Auswertungen der Datei logdatei:

Es gab 32 Anmeldungen am System
Es haben sich insgesamt 7 verschiedene Benutzer angemeldet:

Name: Anzahl der Anmeldungen:

dornbirn 5
elixhausen 2
gailtalmarkt 1
hausfeld 4
obersaifen 2
strassgang 6
velden 12
------------------------------------------------

Die Formatierung ist hier leider nicht zu sehen.
Ich hoffe es sind mir keine Tippfehler unterlaufen.
Das ganze lässt sich erweitern, zum Beispiel wieviel Fehlanmeldungen gab es von wem usw.


mfG
gaw
 
Oben