Maskiertes Suchen, Ersetzen und Rechnen in access.log vor weitere Bearbeitung

J

JoeDormann

Grünschnabel
Hallo,
vielen Dank nochmal für die konstruktive Hilfe in meiner letzten Anfrage.

Aktuell zu meinem kleinen Auswertungsprojekt habe ich eine weitere Aufgabe.
Auszug aus meiner vorbereiteten access.log
Code:
03/Nov/2011:17:59:06;EURUSD;5-2-18-11;-6.72;-6.63;-0.74;300;300;FinFxTradingOy;2.3;9;;-0;435412;582667;27
03/Nov/2011:18:00:01;EURUSD;5-0-10-6;-6.72;-6.63;-0.74;300;300;FinFxTradingOy;2.3;9;;-0;1650694;503527;37
03/Nov/2011:18:00:04;EURUSDm;25-18-28-23;-7.30;-46.22;-5.14;300;300;GoMarketsPtyLtd;2.3;9;;-0;384;404;0
03/Nov/2011:18:10:30;GBPUSDm;28-28-28-28;-7.30;-46.22;-5.14;300;300;GoMarketsPtyLtd;2.3;9;;-0;259;404;0
03/Nov/2011:18:22:15;EURUSD;16-16-16-16;93.78;88.15;9.79;40;50;Alpari(UK)Ltd.;2.3;9;1945750;2435912;1211
03/Nov/2011:18:22:44;AUDUSD;28-28-28-28;93.78;88.17;9.80;40;50;Alpari(UK)Ltd.;2.3;9;1189292;1543273;694
Die Daten kommen bis zu einer Minute verfrüht, da weltweit zugegriffen wird, und die localtime des Users nicht immer exakt paßt.
Die Zeilen sollen vorerst dahingehend geändert werden, das Die Uhrzeit im Bereich ??:?9:00 bis ??:?8:59 in ??:?0:00 geändert wird.
Bsp.:
03/Nov/2011:14:29:00 wird zu 03/Nov/2011:14:30:00 gehört zum 30Minutenbereich der gleichen Stunde des aktuellen Datums
03/Nov/2011:14:48:15 wird zu 03/Nov/2011:14:40:00 gehört zum 40Minutenbereich der gleichen Stunde des aktuellen Datums
03/Nov/2011:14:59:44 wird zu 03/Nov/2011:15:00:00 gehört zum 00Minutenbereich der nächsten Stunde des aktuellen Datums
03/Nov/2011:23:59:00 wird zu 04/Nov/2011:00:00:00 gehört zum 30Minutenbereich de nächsten Stunde des nächsten Tages

Dabei stellt sich noch das Problem, das sich auch das Datum ggf. ändert.

Ich sehe da immo keinen Ansatzpunkt, wie man das am geschicktesten in einer bash anstellen könnte.
Möglicherweise kann man evtl. das Datum in einen gültigen Timestamp umrechen, also in eine long integer Zahl und dann die Zahl anpassen und ins Datumsformat zurücktransformieren?
Dann natürlich den alten Wert durch den Neuen ersetzen und in Datei speichern.

Später muß ich dann noch mal Timestamp,Währungspaar und Provider gruppieren, bevor ich die Datenreihen( das 5-2-18-11 bedeutet last-min-max-durchschn. Value) zerlegen und die Durchschnitte der Bereiche last min max und Durchschn. ermitteln kann , welche in einer 10-Minuten-Grafik ausgegeben, werden sollen.

Zunächst habe ich keinen Schimmer, wie ein vielversprechender Ansatz in einer Bash oder anderen Shell, aussehen könnte.
Ich hoffe, das das als Shellscript machbar ist.

Gerne werde ich hier das Script auf Basis Eurer Tips bis zum Schluß durchziehen.

Gruß Joe

PS: Ich bekomm hier keinen Smilie reingezogen oder platziert. Komisch
 
Hi

Ich wollte mich gerade mal versuchen aber ich verstehe die Einteilung nicht so ganz.
Wieso wird 14:48:15 zurück gerechnet auf 14:40:00
und 14:59:44 vor gerechnet auf 15:00:00
?
 
Hi

Ich wollte mich gerade mal versuchen aber ich verstehe die Einteilung nicht so ganz.
Wieso wird 14:48:15 zurück gerechnet auf 14:40:00
und 14:59:44 vor gerechnet auf 15:00:00
?

Hallo,

hmm ja, es ist so, das eine Grafik erzeugt werden soll, die auf der Zeitbasis im 10-Minutenturnus basiert.
Dazu werden die eingetroffenen Daten eines Zeitabschnittes, z.B. 1 Minute vor 10:00:00 bis 9 Min nach 10:00:00 zusammengefaßt.
Bsp:
01.Jan.2011:09:10:00;12-10-34-31;Provider1;Kontotyp1
01.Jan.2011:09:10:00;13-11-32-30;Provider1;Kontotyp1
01.Jan.2011:09:10:00;01-01-10-08;Provider2;Kontotyp2
02.Jan.2011:18:20:00;02-02-02-02;Provider2;Kontotyp1
usw...

Die 4 Werte aller eingetroffenen Daten werden zusätzlich 4 Spalten gesplittet und für jede Spalte der Durchschnitt ermittelt und schreibe es erneut auf Platte.
Da ich noch gruppieren muß nach Kontotyp und Provider, möchte ich die betreffenden Daten zuvor zusammenzufassen.
Anschließend fülle ich ein Datenarray um die 4 Werte als übereinandergelegte Liniengrafik ausgeben zu können.
Step by Step, sonst wirds zu kompliziert/unübersichtlich.

Jedoch habe ich noch keine feste Idee wie ich diese Zeitzusammenfassung als reines bash-script hinbekommen soll.
Ich mache es gerne so, das ich die Zwischenergebnisse auf die Platte schreibe und die nächste Bearbeitung das File wieder einliest.
So kann ich die Zwischenergebnisse besser checken.

Ich habe schon an php-cli gedacht, da es da etliche Methoden gibt, die es einfacher machen. Wenn es sich aber geschickt umgehen läßt, könnte ich auf php verzichten.

Wie ich es letztendlich umsetze ist egal, da die Daten innerhalb von 2 Minuten komplett eintreffen, und das Script dann bis zu 7 Minuten Zeit hat umd alle Logbücher, incl. der gezippten, komplett durchzurödeln. Derzeitig brauche ich lediglich 10 Sekunden für 9 Gigabyte Log-Einträge für eine andere Grafik.

Aber dieser jetzt neue Part kann da schon mehr ausmachen, vor allem, wenn der Umfang zig-Gigabyte entspricht. Naja, 7 Minuten sind genug ;)

Gruß Joe
 
Zuletzt bearbeitet:

Ähnliche Themen

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Mein Server versendet SPAM in Massen

Mysteriöser 11.4 Absturz - Maschine läuft, SSH und vor Ort Login unmöglich

USB Fehler bei aufwachender Platte

Problem mit Apache2 + MySQL Server

Zurück
Oben