|
bituniverse.com Entwickler Forum
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Gast
|
Verfasst am: Di 17 Feb, 2009 11:12 Titel: Mal kein PHP |
|
|
Mal eine Frage, die so gar nichts mit PHP zu tun hat:
Ich habe eine Textdatei - geneuer gesagt eine Logdatei - und möchte hieraus per Shellscript einige Informationen herausfiltern. Das wäre soweit auch kein Problem, wenn nicht zusammengehörige Informationen in verschiedenen Zeilen stehen würden.
Ich habe also Information 1 und Information 2. Information 1 kann sowohl alleine auftauchen, als auch zusammen mit Information 2. Wenn letzteres der Fall ist, dann steht Information 2 einige Zeilen unter Information 1.
Ich habe mir nun gedacht, ich entferne alle Zeilenumbrüche aus der Datei und bastel dann einen Regex, der das erledigt. Leider ist sed aber immer greedy, wodurch ich mit meinem Regex nur ein einzelnes Vorkommen der Informationen finde. Da aber ja alles in einer Zeile steht, funktioniert auch /g nicht 
| Code: |
sed ':;s/\n/ /;N;T' mein.log | sed -n 's/.*Blablubb \(Information 1\) \).*\(Information 2\)/\1;\2/pg' > auswertung.csv
|
Jemand eine Idee ?
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
|
| Nach oben |
|
 |
Simon W. Anti-verdenglischungs-Abgeordneter
Anmeldedatum: 05.11.2007 Beiträge: 283 Wohnort: Aachen
|
Verfasst am: Di 17 Feb, 2009 16:01 Titel: |
|
|
Sind Information 1 und 2 jeweils feststehende Ausdrücke, oder wie darf man das verstehen?
Im Zweifel kannst du aber auch einfach ein Tcl/Perl/Python/Php/Sh-Script erstellen, was dir wirklich die Datei zeilenweise interpretiert.
|
|
| Nach oben |
|
 |
Gast
|
Verfasst am: Di 17 Feb, 2009 16:11 Titel: |
|
|
Ja, das sind Logeinträge, in denen dann irgendwo innerhalb der Zeile einmal value=Wert steht. Mich interessiert nun zu zwei bestimmten values der geloggte Wert. Diese treten aber in verschiedenen Zeilen auf und lassen sich nur insofern verbinden, als dass Information entweder alleine steht oder einige Zeilen darunter dann Information 2 folgt.
| Code: |
Feb 17 09:16:17 : blablub
Feb 17 09:16:18 : blablub
Feb 17 09:16:19 : Information 1 value = wert
Feb 17 09:16:20 : blablub
Feb 17 09:16:21 : blablub
Feb 17 09:16:22 : blablub
Feb 17 09:16:23 : Information 1 value = wert
Feb 17 09:16:24 : blablub
Feb 17 09:16:25 : blablub
Feb 17 09:16:26 : Information 2 value = wert
Feb 17 09:16:27 : blablub
Feb 17 09:16:28 : blablub
Feb 17 09:16:29 : Information 1 value = wert
Feb 17 09:16:30 : blablub
Feb 17 09:16:41 : blablub
Feb 17 09:16:42 : blablub
Feb 17 09:16:43 : Information 1 value = wert
Feb 17 09:16:44 : blablub
Feb 17 09:16:45 : blablub
Feb 17 09:16:46 : Information 2 value = wert
|
Das ganze muss auf einem minimal Debian System laufen, also php, perl, etc. scheiden als Lösungsweg aus.
|
|
| Nach oben |
|
 |
Simon W. Anti-verdenglischungs-Abgeordneter
Anmeldedatum: 05.11.2007 Beiträge: 283 Wohnort: Aachen
|
Verfasst am: Di 17 Feb, 2009 16:50 Titel: |
|
|
Also ich hab mal kurz das sed mit awk zusammengefrickelt, aber das geht auch mit awk selbst. Schön ist das ganze eh nicht. 
awk-script:
| Code: |
BEGIN {
FS=";"
value1=""
}
/^1.*/ {
value1=$2
}
/^2.*/ {
print value1, $2
}
|
aufrufen mit:
sed -n 's/^.*Information \([12]\) value = \(.*\)/\1;\2/p' mein.log|awk -f awk-script
Ergibt bei mein.log:
| Code: |
Feb 17 09:16:17 : blablub
Feb 17 09:16:18 : blablub
Feb 17 09:16:19 : Information 1 value = wertv11
Feb 17 09:16:20 : blablub
Feb 17 09:16:21 : blablub
Feb 17 09:16:22 : blablub
Feb 17 09:16:23 : Information 1 value = wertv12
Feb 17 09:16:24 : blablub
Feb 17 09:16:25 : blablub
Feb 17 09:16:26 : Information 2 value = wertv21
Feb 17 09:16:27 : blablub
Feb 17 09:16:28 : blablub
Feb 17 09:16:29 : Information 1 value = wertv13
Feb 17 09:16:30 : blablub
Feb 17 09:16:41 : blablub
Feb 17 09:16:42 : blablub
Feb 17 09:16:43 : Information 1 value = wertv14
Feb 17 09:16:44 : blablub
Feb 17 09:16:45 : blablub
Feb 17 09:16:46 : Information 2 value = wertv22
|
folgende Ausgabe:
| Code: |
wertv12 wertv21
wertv14 wertv22
|
Reicht das als Ansatz? Sei dir aber bitte bewusst, dass es bei großen Dateien lange dauern/viel Auslastung erzeugen kann.
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
|
| Nach oben |
|
 |
Simon W. Anti-verdenglischungs-Abgeordneter
Anmeldedatum: 05.11.2007 Beiträge: 283 Wohnort: Aachen
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Mi 18 Feb, 2009 11:49 Titel: |
|
|
So, zwar drei Tage für den Mist gebraucht, aber es läuft nun - soagr ohne sed. Hätte mir mal früher awk anschauen sollen
Danke für deine Hilfe!
|
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB2.de
|