rc-halv Skrevet 5. mars 2008 Del Skrevet 5. mars 2008 (endret) Jeg har et problem, serveren min har en logg, jeg skal finne IP-adressene i den. Jeg skal telle hvor mange ganger hver adresse forekommer. Og skrive ut resultat. Dette må gjøres før de nye brukerene kommer på fredag morgen. Noe av det jeg har laget så langt: foreach (<loggfil>){ $ip=~ \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/; print $ip; } hvor skal $_ puttes inn? Vil si hjertelig takk for all hjelp om dere hjelper meg! All hjelp mottaes, men helst et ferdig skript. Endret 5. mars 2008 av steinslett Lenke til kommentar
trtrtr Skrevet 6. mars 2008 Del Skrevet 6. mars 2008 her har du et kjapt forslag use strict; open IN, "<", "loggfil" or die $!; my %ipAdrFound = (); while (my $line = <IN>) { #extract ip adr (assuming one ip adr pr line) my ($ip) = $line =~ m-(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-; $ipAdrFound{$ip}++; } #show ip adr sorted by number of times found for my $ip ( sort { $ipAdrFound{$b} <=> $ipAdrFound{$a} } keys %ipAdrFound ) { printf "IP %-14s Found: %s times\n", $ip, $ipAdrFound{$ip}; } Lenke til kommentar
rc-halv Skrevet 6. mars 2008 Forfatter Del Skrevet 6. mars 2008 (endret) Hjertelig takk, forstod ikke alt, men brukte litt. Hva er for eksempel <IN>? Endret 6. mars 2008 av steinslett Lenke til kommentar
rc-halv Skrevet 6. mars 2008 Forfatter Del Skrevet 6. mars 2008 (endret) Har nå fått det hele til å virke. Men forstår fortsatt ikke alt. Det er derimot ett problem, Linjer uten IP-adresser blir også registrert. IP Funnet: 10 gang(er) ##(her er den tomme IP-en) IP 123,123,123 Funnet: 2 gang(er) IP 9,9,9,9 Funnet: 1 gang(er) IP 41.42.43.55 Funnet: 1 gang(er) Endret 6. mars 2008 av steinslett Lenke til kommentar
trtrtr Skrevet 6. mars 2008 Del Skrevet 6. mars 2008 når regex ikke finner noen ip vil variabel $ip være tom (dvs "false"). for å unngå å legge denne verdien inn i hashen kan vi legge inn en sjekk slik: <...resten av kode her...> my ($ip) = $line =~ m-(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-; #gå til start av loopen igjen med en gang om $ip er false next if (!$ip); <...resten av kode her...> IN er bare (valgfritt) navn på et filehandle. open IN, "<", "loggfil" or die $!; dette er "3 arguments open" (i mots. til gammel 2arg. måte: open IN,"<loggfil") og regnes som mer sikker. anbefaler forøvrig "effective perl" boka om du starter opp med perl. den er genial og gir deg bra skills på få sider. du får den for en hundrings (inkl porto) på amazon (brukt). Lenke til kommentar
rc-halv Skrevet 6. mars 2008 Forfatter Del Skrevet 6. mars 2008 Hjertelig takk igjen. Brukte goto, da det er lettere å forstå i denne sammenhengen. Lenke til kommentar
rc-halv Skrevet 10. mars 2008 Forfatter Del Skrevet 10. mars 2008 Alle nye brukere er nå registrert i databasen sammen med de gamle. Alt gikk bra! For nok mye bruk for dette senere! Lenke til kommentar
Torbjørn Skrevet 11. mars 2008 Del Skrevet 11. mars 2008 hmf... goto er spaghettikode Lenke til kommentar
rc-halv Skrevet 12. mars 2008 Forfatter Del Skrevet 12. mars 2008 Spaghetti er det beste jeg vet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå