Hallo,
ich will ein log komprimieren, und mir nur das erste Auftreten/Veränderung eines Ergeignisses ausgeben lassen.
Ich habe die Struktur jetzt als Skalar(CSV) im Arbeitsspeicher. Aufbau:
ID; Datum; VeränderbareWerte
01; 2011-01-01; abc
02; 2011-01-01; jkl
01; 2011-01-02; abc
01; 2011-01-03; xyz
Es soll quasi die dritte Zeile gelöscht werden.
Mein Ansatz ist, dass ich das Datum lösche, und nach "\n" als trenner in ein Array splitte, welches ich dann in eine Hashmap überführe um alle duplikate auszufiltern.
Dies schrumpfte das ganze von 4600 Zeilen auf 600 zusammen. Allerdings fehlt mir nun das Datum des ersten Vorkommens.
$daten ist der Ursprung
my $daten1 = $daten;
$daten1 =~ s%(.*?;).*?;(.*)%$1$2%g;
my @daten=split(/\n/,$daten1);
@daten=&del_double(@daten);
sub del_double{
my %all=();
@all{@_}=1;
return (keys %all);
}
Die Frage ist jetzt wie ich mir das Datum am besten wieder hole.
Mein trivialer Ansatz währe gewesen
$daten sortieren
foreach @daten - suche erste Zeile in $daten und schreibe diese in eine Datei.
Allerdings ist das wahrscheinlich nicht sehr performant, vorallem bei großen Datenmengen...
Kann mich jemand vielleicht in die richtige Richtung lenken? Vielleicht geht das ganze ja auch viel einfacher...
Vielen Dank,
Bastian