Thread Hash automatisch aus Daten erstellen
(3 answers)
Opened by Nico at 2015-11-10 08:54
hier ist meine Lösung um eine differenz zwischen der letzten ein und auslogg zeit zu bilden (pro IP)
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #! /usr/bin/perl #use strict; use warnings; use Time::Local; my $infile = "D:\\Privat\\PERL Projekt\\access.log.proxy"; my $outfile = "D:\\Privat\\PERL Projekt\\auswertung.csv"; my ($ip,$date,$time); my ($d, $mon, $yy, $h, $min, $sek) = 0; my $sektime = 0; my ($gestern, $daten); my %dl; #print ("Bitte Datum von Gestern eingeben"); #print ("Beispiel: 02/Nov/2015\n"); #chomp ($gestern=<STDIN>); $gestern = "02/Nov/2015"; open (READLOG, "<$infile") or die ("Datei $infile nicht gefunden.\n\n"); open (WRITE, ">$outfile") or die ("Datei $outfile konnte nicht erstellt werden.\n\n"); while (<READLOG>){ if ($_=~m/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^\[\]]+\[\d{2}\/[a-zA-z]{3}\/\d{4}:\d{2}:\d{2}:\d{2}\s[\+|\-]\d{4}\]/) { ($ip,$date,$time) = m/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[^\[\]]+\[(\d{2}\/[a-zA-z]{3}\/\d{4})\:(\d{2}:\d{2}:\d{2})\s[\+|\-]\d{4}\]/; if ($date eq $gestern) { ($d, $mon, $yy) = split( "/", $date ); ($h, $min, $sek) = split( ":", $time ); $sektime = timelocal ($sek,$min,$h,$d,$mon,$yy); push (@{$dl{$ip}}, $sektime); #hier mach ich ein dreidimensionales Hash, die Zeitstempel werden der reihe nach pro Ip in ein Array geschrieben } } } my $i = 0; foreach $daten (sort keys %dl){ $i = ${$dl{$daten}}[-1] - ${$dl{$daten}}[0]; # hier rechne ich den letzten wert des arrays - den 1. wert $sek = $i%60; $min = (($i-$sek)/60)%60; $h = ($i-$sek-($min*60))/3600; print WRITE ("$daten;$h:$min:$sek\n"); } close (WRITE); close(READLOG); ein kleines Problem habe ich noch. Wenn in einem Array nur 1 Wert steht, wie kann ich die betreffenden IPs auslassen? Last edited: 2015-11-10 13:01:40 +0100 (CET) |