Zum Inhalt springen

Mit einem Shell Script ein String zerlegen


swonson

Empfohlene Beiträge

Hallo Leute,

ich suche seit heute Früh Google wund und finde nichts.

Ich bin gerade dabei ein Shell Script zu schreiben, welches folgende Zeile zerlegen soll.

2010-03-14 21:13:54 [iNFO] swonson [/xx.xx.xxx.xxx.:xxxx] logged in with entity id 34

Das Problem, welches ich habe ist, dass der Name "swonson" auch ein anderer sein kann, also auch kürzer oder länger. Gleiches gilt für die Ip die in [] seht.

Den Timestamp vorne bekomme ich bereits weg, da die Zeichenlänge ja immer die gleiche ist.

Bisher habe ich nur folgendes:

DATEI=Server_02/server.log


for var in $DATEI

do

	egrep "logged in" $var

	egrep "logged in" $var | cut -c 1-19

	egrep "logged in" $var | cut -c 20-27

done

Ziel des Ganzen ist es den Timestamp, den Nick und das "logged in" oder "disconnect" in ein array zu packen.

Mit dem oben genannten Script bekomme ich diese Ausgaben:

2011-03-16 12:11:52

[iNFO]

Was auch okay ist. Ich komme aber leider nicht weiter.

Mein Idee war es den Nick auszulesen in dem ich sage nimm alles zwichen ] und [ und geb es mir. Ich finde nur nicht heraus wie das geht.

Ich hoffe ihr könnt mir helfen.

Gruß der Swonson

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich musste nun feststellen, dass mein Anfang relativ schlecht war.

um meine egrep-Ausgabe nun in ein Array zu packen habe ich folgendes getan:

arr1[$i]=`egrep "logged in" $var | cut -c 1-19`
Klappt auch super. Leider musste ich jetzt feststellen, das egrep alle Ergebnisse, sprich alle Zeilen in ein Array-Feld packt, da er nicht Zeile für Zeile checkt sonder den ganzen Text und alles aufeinmal ausgibt. Gibt es da für eine gescheite lösung? So sieht die Ausgabe meines Arr-Feldes aus:
2011-03-14 17:01:15 2011-03-14 17:03:41 2011-03-14 17:25:46 2011-03-14 17:26:42 2011-03-14 17:27:33 2011-03-14 17:27:53 2011-03-14 17:31:55 2011-03-14 17:40:42 2011-03-14 17:47:28 2011-03-14 19:40:09 2011-03-14 20:01:10 2011-03-14 20:13:50 2011-03-14 20:39:37 2011-03-14 20:45:00 2011-03-14 20:50:40 2011-03-14 20:56:59 2011-03-14 20:58:15 2011-03-14 20:59:49 2011-03-14 21:11:07 2011-03-14 21:13:06 2011-03-14 21:13:48 2011-03-14 21:14:14 2011-03-14 21:16:53 2011-03-14 21:18:58 2011-03-14 21:28:15 2011-03-14 21:28:48 2011-03-14 21:41:47 2011-03-14 21:45:50 2011-03-14 21:49:17 2011-03-14 22:17:30 2011-03-14 22:20:21 2011-03-14 22:24:03 2011-03-14 22:43:17 2011-03-14 22:46:25 2011-03-16 12:11:52

Ich hätte es aber gerne so:

arr[1]: 2011-03-14 22:24:03

arr[2]: 2011-03-14 22:43:17

ect...

Hat jemand einen Anfang für mich?

EDIT: oder liegt es an der schleife?

for var in $DATEI

do

arr1[$i]=`egrep "logged in" $var | cut -c 1-19`

arr2[$y]=`egrep "logged in" $var | cut -d "]" -f2 | cut -d "[" -f1`

i++

y++

done

Bearbeitet von swonson
Link zu diesem Kommentar
Auf anderen Seiten teilen

Es liegt an der For-Schleife. Die ist nämlich ziemlich Grütze zum Scripten ;)

Dein i++ und y++ wird nur 1 mal am Ende ausgeführt (übrigens kannst du dir das $y sparen, ist ja eh immer der selbe Wert wie $i.

Was du machen könntest:

grep erstmal das log nach "logged in" und schreib das ganze in eine temp-Datei.

Zähl die Anzahl der Zeilen in der temp-Datei und schreib sie in eine Variable.

Schreib eine While-Schleife, die mit sed -n die Temp-Datei Zeile für Zeile augibt, damit du sie zurechtschneiden und in dein Array schreiben kannst.

so z.B.

ZEILEN=$(wc -l $TEMP | cut -d " " -f6)

i=1

while [ $i -le $ZEILEN ]

do

array1[$i]=$(sed -n $i"p" $TEMP | cut -c 1-19)

i++

done

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...