|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Bestimmten Teil aus einer Datei auslesen
|
Seitenanfang |
Hi, Ich habe eine Datei (access.log) und lese diese mit Perl aus. Danach steht das ausgelesene in @lines. In der Datei (access.log) steht folgendes: 127.0.0.1 - - [26/Sep/2005:19:15:10 +0200] "GET /cgi-bin/loggy.cgi?___conf___+FRANK MILLER+MUELLNER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)" 127.0.0.1 - - [26/Sep/2005:19:15:20 +0200] "GET /cgi-bin/loggy.cgi?___conf___+FRANK MILLER+MUELLNER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)" 127.0.0.1 - - [26/Sep/2005:19:15:31 +0200] "GET /cgi-bin/loggy.cgi?___conf___+KARL HUBER+HUBER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)" 127.0.0.1 - - [26/Sep/2005:19:15:41 +0200] "GET /cgi-bin/loggy.cgi?___conf___+HANS MAIER+COMPUTER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)" Nun möchte ich aus @lines immer den Text nach dem Plus herauslesen. Also z.B. FRANK MILLER und MUELLNER wie mache ich das am besten unter Perl? Im Moment hab ich folgendes Script, dabei gibt er aber immer nur "," aus:#!/usr/local/bin/perl $file = '/Programme/xampp/apache/logs/access.log'; open(INFO, "<$file" || "Datei nicht gefunden\n"); lines = <INFO>; close(INFO); while (@lines) { m/___\+(.*)\+(.*)?HTTP/; print "$1, $2"; } vielen dank im vorhinein mfg muene
Datum: 21.10.2005-08:48

|
re: Bestimmten Teil aus einer Datei auslesen
|
Seitenanfang |
Hi, am Besten gleich dran gewöhnen immer oben in der shebang Zeile das -w zu benutzen (warnings einschalten), dann auch "use strict;" benutzen und alle Variablen mit my initialisieren. Das hilft ungemein, Fehler zu finden. #!/usr/bin/perl -wuse strict; my $file = '/Programme/xampp/apache/logs/access.log'; open(INFO, "<$file" || die "Datei nicht gefunden\n"); # die fehlt my @lines = <DATA>; # hier fehlte das '@' close(INFO); for (@lines) # for, nicht while { m/___\+(.*)\+(.*)?HTTP/; print "$1, $2\n"; }
Gruss, svenXY
Datum: 21.10.2005-10:46

|
re: Bestimmten Teil aus einer Datei auslesen
|
Seitenanfang |
Ich kenne mich mit access.logs nicht aus. In dem Beispiel standen immer nur drei. Falls da aber unterschiedlich viele Namen stehen können, dann würde ich das so machen: einmal hinter dem ersten + herausziehen und was dann gematched hat nochmal spliten:
@namen = split '+', $match;
Datum: 24.10.2005-09:08

|
|

|

|

|
 |

|

|
|