Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Kommandozeilen-Jongliererei

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jurb
Gast





BeitragVerfasst am: 19. Sep 2007 9:27   Titel: Kommandozeilen-Jongliererei

Hallo auch,

ich habe ein Logfile von einem propietären Bussystem. Der Bus funktioniert generell so, dass auf eine REQUEST-Meldung eine RESPONSE-Meldung eingeht. Scheinbar gibts hiermit ein Problem. Ich habe ein Textfile, das wie folgt ausschaut:

Code:

<Packetnummer>, <DST>, <SRC>, <TYPE>, <DATA>
...
...


Für <TYPE> sind verschiedene Meldungstypen möglich, unter anderem Request und Response.
Nun möchte ich automatisiert überprüfen, dass auf jedes Request eine Response eingeht. Ich kann z.B. mit grep alle Request oder alle Response Meldungen rausholen, aber ich habs nicht geschafft, dass Request UND Response Meldungen rausgeholt (d.h. in ein separates File geschrieben) werden. Damit will ich mal alle nicht relevanten Meldungen rausfiltern.
Als nächstes ist die Frage, wie ich irgendwie mit Linux-Shell-Boardmitteln gucken kann, das auf jede Request-Meldung eine Response-Meldung in der darauffolgenden Zeile steht. Ich habe mir mal awk angeschaut, aber auf die schnelle krieg ich da nix hin...

Habt Ihr vieleicht eine gute Idee? Wäre cool!

Danke

Jurb
 

Jurb
Gast





BeitragVerfasst am: 19. Sep 2007 9:48   Titel:

Für das 1. Problem habe ich die Lösung gefunden:
Code:

grep -i -E "response|request" logfile.txt > filtered.txt


Wie kann ich jetzt automatisiert checken, dass auf ein request ein response i der (darauffolgenden) Zeile kommt?

Danke![/code]
 

hastifranki



Anmeldungsdatum: 06.05.2006
Beiträge: 252

BeitragVerfasst am: 19. Sep 2007 20:05   Titel:

Vielleicht hilft folgendes Perl-Script weiter:

Code:
#!/usr/bin/perl -w
open (FH, "logfile.txt") or die "Die Datei lässt sich nicht öffnen\n";
$sw = 0;
while ($line=<FH>) {
   if ($line =~ /response/ and $sw) {print "$line"; $sw = 0};
   if ($line =~ /request/ and not $sw) {print "$line"; $sw = 1} else {$sw=0};
   };
close FH;
print "\n"


Damit die Datei ausführbar ist, muss chmod +x Dateinname.pl eingegeben werden.

Man kann natürlich die Ausgabe auch noch umleiten: ./Dateiname.pl >filtered.txt

Möglicherweise gibt es auch noch andere Lösungsmöglichkeiten.

Viele Grüße
Frank
 
Benutzer-Profile anzeigen Private Nachricht senden

ugly script
Gast





BeitragVerfasst am: 23. Sep 2007 3:49   Titel:

Code:

#!/bin/bash

check=0;
lineno=0;
while read line; do
   if [ `echo $line |grep request $1>/dev/null; echo $?` -eq 0 ]; then
      check=`expr $check + 1`
   elif [ `echo $line |grep response $1>/dev/null; echo $?` -eq 0 ]; then
      check=`expr $check - 1`
   fi
   if [ $check -gt 1 ]; then
      exit $lineno;
   fi
   lineno=`expr $lineno + 1`
done < logfile

Auf die Schnelle hingezimmert. Treten zwei requests hintereinander auf, bricht das script ab und der Rückgabewert enthält die Zeilennummer des zweiten request. (Zu erfragen mit 'echo $?')
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy