perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 26
Click for quality!




11.02.2012 / 07:45

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragTextdatei teilen
Seitenanfang
Hallo zusammen,

ich stehe vor einem kleinen Problem, das erfahrene Perl-Programmierer sicher schnell lösen können - meine Kenntnisse sind zu sehr eingerostet...

Mir liegt eine 1,7 GB (!) große Logdatei vor, die Logeinträge (Seitenzugriffe meiner Website) der letzten 3 Jahre enthält. Die Zeilen sehen wie folgt aus:


80.135.193.130 - - [22/May/2005:19:33:24 +0000] "GET /Startseite--2.html HTTP/1.1" 200 14933 "" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

Ich würde nun gerne diese riesige Datei gerne auf mehrere kleinere Dateien aufteilen - eine Verarbeitung der großen Datei mit irgendwelchen Software-Tools ist bislang fehlgeschlagen.
Die Aufteilung könnte nach Jahr bzw. Monat erfolgen, so dass man dann pro Monat eine eigene Logdatei hat (die natürlich entsprechend heißen sollte).

Hat jemand eine Idee und kann mir helfen? Vielleicht kann es ja jemand schnell runterprogrammieren - in irgendwelchen Archiven hab ich nichts dergleichen gefunden...

Vielen Dank
Kuhlsen

Datum: 09.09.2007-01:03

Beitragre: Textdatei teilen
Seitenanfang
Hallo Kuhlsen,

das folgende Script sollte deine Aufgabe erledigen (ist ungetestet).
Die Daten werden nach ./jahr/monat/tag geschrieben, wenn du monatliche Files benötigst brauchst du es nur ein wenig zu kürzen...

Gruß TommyB


#!/usr/bin/perl

use strict;

# oeffne das logfile
open(IN,"<inputfile.log") or die "Can't open Logfile\n";

# durchlaufe das logfile zeilenweise
while( my $in = <IN> ){

# ueberspringe leer- und kommentarzeilen
next if( $in =~ /^#|^\s*$/ );

# suche in der zeile die fuer mich wichtigen daten,
# also monat und jahr
$in =~ /\[(\d+)\/([^\/]+)\/(\d{4})/;
my ($tag,$monat,$jahr) = ($1,$2,$3);

# lege das Verzeichnis '$jahr/$monat' an
system("mkdir -p $jahr/$monat");

# schreibe den datensatz in das tageslogfile
open(OUT,">>$jahr/$monat/$tag");
print OUT $in;
close OUT;
}

# schliesse das logfile
close IN;

Datum: 09.09.2007-18:37

Beitragre: Textdatei teilen
Seitenanfang
Prima, besten Dank!
Ich werde es gleich mal testen... :-)

Datum: 10.09.2007-10:38

-






-
-