Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 12. Nov 2018 23:01

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kommandozeilen-Jongliererei
BeitragVerfasst: 19. Sep 2007 9:27 
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 19. Sep 2007 9:48 
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]


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 19. Sep 2007 20:05 
Offline
Benutzeravatar

Registriert: 06. Mai 2006 19:58
Beiträge: 252
Vielleicht hilft folgendes Perl-Script weiter:
Code:
#!/usr/bin/perl -w
open &#40;FH, "logfile.txt"&#41; or die "Die Datei lässt sich nicht öffnen\n";
$sw = 0;
while &#40;$line=<FH>&#41; &#123;
	if &#40;$line =~ /response/ and $sw&#41; &#123;print "$line"; $sw = 0&#125;;
	if &#40;$line =~ /request/ and not $sw&#41; &#123;print "$line"; $sw = 1&#125; else &#123;$sw=0&#125;;
	&#125;;
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Sep 2007 3:49 
Code:
#!/bin/bash

check=0;
lineno=0;
while read line; do
	if &#91; `echo $line |grep request $1>/dev/null; echo $?` -eq 0 &#93;; then
		check=`expr $check + 1`
	elif &#91; `echo $line |grep response $1>/dev/null; echo $?` -eq 0 &#93;; then
		check=`expr $check - 1`
	fi
	if &#91; $check -gt 1 &#93;; 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 $?')


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de