Hallo,
hab ein kleines Problem mit einer Log-Datei. Das ist ein riesiger Haufen Text, hab es momentan in einem Word-Dokument, da sind es 1400 (!!) Seiten. Die Software von der die Log-Daten stammen erlaubt auch keine Filterung, nur den Export als Text.
Das Problem ist dass ich darin ein bestimmtes Ereignis eines bestimmten PC finden muss - nur leider steht der PC-Name nicht in derselben Zeile wie der Ereigniscode, sondern eine Zeile darunter. Und das Ereignis gibts einige hundert Mal, von den verschiedensten PCs. Wenn ich einfach danach suche bin ich wahrscheinlich in Rente bis ich den gesuchten Eintrag finde. Und zu allem Überfluss steht in der Zeile mit dem Ereigniscode vorher das Datum und die Uhrzeit. Das sieht so aus:
Host: PG178
17.10.2011 10:45:18 | Event: XXX
Darunter sind dann jeweils noch mehrere Zeilen mit näheren Details zum Ereignis.
Weiß jemand eine Möglichkeit, Text so zu durchsuchen dass ich 2 Begriffe definieren kann die in direkt aufeinanderfolgenden Zeilen vorkommen?
Anwendungs-Software und Apps 14.489 Themen, 73.614 Beiträge
Grüß dich Bot,
Gäbe es eine Möglichkeit, den Text des Logfiles in eine Tabellenkalkulation zu übernehmen? Du könntest dann in einer Nebenspalte mit WENN-Abfragen zum Ziel kommen.
Steht der Inhalt des Logfiles z.B. in Spalte A, könnten in B die Formeln stehen, Beispiel Zelle B99:
WENN(A99="PC-name";A98;"")
Sobald der PC-Name in einer Zeile gefunden wird, gibt die Formel den Wert der Zelle eine Zeile darüber aus. Das wäre dann das dazugehörige Ereignis. Andernfalls wird nichts ausgegeben, daher das ;"" am Ende der Fomel (würde man darauf verzichten, würde die Fomel immer FALSCH ausgeben, wenn in A nicht der PC-Name steht).
HTH
Olaf
Gäbe es eine Möglichkeit, den Text des Logfiles in eine Tabellenkalkulation zu übernehmen?Hmm, sag Du es mir. Als Plain Text gespeichert ist das Ergebnis eine 3,7MB große Textdatei. Die wollte ich jetzt grad mal in LibreOffice importieren, mit Leerzeichen als Feldtrenner. Das Ergebnis war dass er ein paar Minuten gerödelt hat und anschließend ist LibreOffice kommentarlos abgestürzt. War wohl etwas zu groß, der Happen...
Aber zielführend ist das wohl auch nicht, weil er dann Zeilenumbrüche nicht als Trenner behandelt und Worte aus verschiedenen Zeilen in einer Zelle zusammenfügt. Hab keine Möglichkeit gefunden 2 verschiedene Zeichen (Leerzeichen UND Zeilenumbruch) als Feldtrenner zu kombinieren, geht das irgendwie?
Ich hab auch schon versucht die Datenmenge mit einem Batchscript einzudampfen, also insofern dass ich alle Einträge rauswerfe die nicht von dem PC stammen um den es mir geht. Da komme ich aber nicht so recht weiter, u.a. weil die einzelnen Log-Einträge unterschiedlich lang sind - so zwischen 5 und 8 Zeilen.
Hi Invisible,
ich hätte einen Vorschlag - schnapp dir mal das Programm Notepad++ (gibbet u.a. unter http://www.chip.de/downloads/Notepad_12996935.html) und schau dir nach dem Laden mal an, wie das Teil die Datei darstellt.
Hintergrund - der Editor versteht sich auf relativ viele Programmiersprachen und hebt so z.B. selbstständig gewisse Syntaxe / Ausdrücke farblich hervor; auch sind "Batch-Manipulationen" von Dokumenten Ratz-Fatz möglich.
Was ich mir bei dir hier vorstellen könnte, wäre die Anwendung der "inkrementellen Suche" - du suchst hier zuerst nach einem Suchstring, welcher dann farblich markiert wird und dann nach dem nächsten Suchstring, welcher wiederum anders farblich markiert wird (die Farbe des ersten bleibt bestehen)....
Vielleicht hilft es dir ja - btw - was für eine Log-Datei ist das denn bzw. von was für einem System wird sie denn generiert?
BG,
Bergi2002
Hatte heute nachmittag keine Zeit mehr, ich versuche es morgen mal.
Die LOG-Datei stammt vom Server einer uralten auf DOS basierenden Warenwirtschaftssoftware. Und die Firma die diese Software geschrieben hat gibts nicht mehr - genauso wenig wie einen Mitarbeiter der sich wirklich damit auskennt. Und nun gibts - sagen wir mal vorsichtig - Unstimmigkeiten beim Lagerbestand.
Als Plain Text gespeichert ist das Ergebnis eine 3,7MB große Textdatei. Die wollte ich jetzt grad mal in LibreOffice importieren, mit Leerzeichen als Feldtrenner. Das Ergebnis war dass er ein paar Minuten gerödelt hat und anschließend ist LibreOffice kommentarlos abgestürzt.
Wie bist du da genau vorgegangen - hast du zuerst einmal OOcalc geöffnet? Denn andernfalls, z.B. über die Option "Öffnen mit..." plus Auswahl OpenOffice würde ja mit einiger Sicherheit der OOwriter herangezogen werden, was normalerweise ja auch die erste Wahl für einen Text wäre, nur in diesem Fall eben nicht.
Na gut, vielleicht klappt der Tipp von Borlander besser...
CU
Olaf
Hab zuerst LibreOffice Calc geöffnet und damit dann versucht die Textfile zu importieren.
Tja, so hätte ich es auch versucht... schade, dann stößt Calc damit an seine Grenzen.
Schön, dass wenigstens Borlanders Tipp funktoniert hat. THX für die Rückmeldung.
Greetz
Olaf
Du könntest den Zeilenumbruch (oder Absatzwechsel) zwischen den zusammenhängenden Zeilen vielleicht irgendwie trickreich entfernen, so dass die Inhalte in einer gemeinsamen Zeile stehen.
Ich persönlich würde aber auch Olafs Vorschlag favorisieren.
Gruß, mawe2
sollte es tun ;-)
Welcher Suchstring? Ich hab 2...
Und was bewirkt "-zo", ich finde den Schalter in keiner Dokumentation.
Mit
grep -zo '^Host: PG178\s17.10.2011 10:45:18 | Event: XXX$' Dateiwürde es funktionieren. Ist allerdings noch nicht ganz sauber, weil \s allgemein nach Whitespaces sucht und nicht nach Zeilenumbrüchen. Wobei gerade Zeilenumbrüche durch die unterschiedlichen Codierungen sowieso problematisch wären…
Gruß
Borlander
Datum und Zeit dürfen nicht Bestandteil der Suche sein, da sie unbekannt sind. Genau darum gehts ja - ist von einem bestimmten PC aus etwas Bestimmtes getan worden, und wenn ja, wann?
Wobei gerade Zeilenumbrüche durch die unterschiedlichen Codierungen sowieso problematisch wären…
Jo, ich versuche sein 2 Tagen mir ein Batchscript zusammenzuklauben mit der ich die ganzen uninteressanten Einträge entfernen kann. Aber dazu kenne ich mich nicht gut genug aus, das Script müsste überprüfen ob in der ersten Zeile was bestimmtes steht (der Hostname):
- wenn ja ab der nächsten Leerzeile weitersuchen
- wenn nein alles bis zur nächsten Leerzeile löschen.
Datum und Zeit dürfen nicht Bestandteil der Suche sein, da sie unbekannt sind.
Das ist allerdings kein wirkliches Problem mit Regulären Ausdrücken (RegEx) ;-)
Da müsstest Du den Suchstring so anpassen, dass dort die passenden Ziffern auftreten dürfen…
Wobei mir auch gerade auffällt, dass die Punkte (stehen für beliebige Zeichen) besser noch maskiert werden sollten. So scheint es zu funktionieren:
grep -zo '^Host: PG178\s[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9][0-9][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9] | Event: XXX$' Datei
Das ist aber sicher noch deutlich schöner und sauberer möglich. Dafür müsste man sich aber noch mal umfangreicher mit dem verwendeten RegEx-Dialekt beschäftigen so man den nicht täglich nutzt…
Gruß
Borlander
Vielen Dank euch allen, insbesondere an Borlander --> es hat tatsächlich funktioniert!
Ich könnte Dir als Auswertungssoftware das Tool mtail empfehlen.
Falls die Logdatei im ASCII Format vorliegt, ist das ein Wundertool.
Hier kann man z.B. auch einen Filterstring setzen und gleichzeitig festlegen, wie viele Zeilen er danach mit anzeigen soll.
Kann auch wunderbar benutzt werden, um Logs im laufenden Betrieb zu überwachen und bei auftreten von bestimmten Strings, vielfältige Alarme auszulösen.
http://ophilipp.free.fr/op_tail.htm