#!/usr/bin/perl use strict; use warnings; use Time::Local; use Date::Calc qw(Day_of_Year); my @found=(); # position in der datei bestimmen my $pos_in_file=tell(DATA); while(my $line=) { # zeile zerlegen my @l=split(/\|/,$line); # datum/zeit zerlegen my @t=split(/[\.:]/, $l[3].".".$l[2]); # timestamp bilden my $ts=timegm($t[2],$t[1],$t[0],$t[3],$t[4]-1,$t[5]-1900); # tag im jahr finden my $doy=Day_of_Year($t[5],$t[4],$t[3]); # zeile testen my $add=1; for my $i (reverse(0..$#found)) { my @f=@{$found[$i]}; if($f[0] eq $l[1] and $f[2] == $doy) { $add=0; if($f[1] >= $ts) { splice(@found,$i,1); $add=1; last; } } } # zeile hinzufügen wenn alles ok push(@found,[$l[1],$ts,$doy,$pos_in_file]) if($add); $pos_in_file=tell(DATA); } # das ergebnis ausgeben for my $p (@found) { seek(DATA,$p->[-1],0); my $line=; ### AUSGABE: ### print $line; } __DATA__ |9507042402|23.06.2008|18:17:40|PASS|1|1|1|63.92762|46.3626594543457||| |9507042402|23.06.2008|18:18:49|FAIL|1|1|1|63.36795|46.3676109313965||| |9507042402|23.06.2008|18:28:39|FAIL|1|1|1|63.36795|46.3676109313965||| |9507164212|23.06.2008|18:52:35|FAIL|1|1|1|75.30767|46.3609733581543||| |9507164212|23.06.2008|18:46:14|PASS|1|1|1|63.37932|46.3660926818848||| |9507164215|23.06.2008|18:51:05|FAIL|1|1|1|66.22319|46.3735771179199||| |9507164208|23.06.2008|18:27:28|PASS|1|1|1|70.04309|46.3699073791504|||