Thread Doppelte Werte Ausfiltern (8 answers)
Opened by Lebewesen at 2012-05-03 16:46

Lebewesen
 2012-05-03 16:46
#158011 #158011
User since
2011-09-09
62 Artikel
BenutzerIn

user image
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
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
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

Code: (dl )
1
2
$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

View full thread Doppelte Werte Ausfiltern