lordmoorhuhn
Goto Top

Perl-Alternative zu SED Streams Editor

Suche Perl-Script welches gleiche Funktion wie SED-Befehl hat

Servus alle zusammen,

ich bin gerade dabei Logs von unserem Proxy auszuwerten. Da ich die Daten aber weitergebe, muss ich diese vorher anonymisieren, sprich der Benutzer "kb300" wird zu "User1", "kb301" zu "User2" etc.. Habe es mit einem Batch via SED-Befehl probiert. Bei zwei User ändern rödelt die Maschine nur lange aber spuckt dann au Ergebnis aus. Ab drei Usern kommt dann Fehler "Couldn´t allocate memory". Wohl etwas zu intensiv fürs Maschinchen. Jetz war meine Idee das Ganze über ein Perl-Script laufen zu lassen, habe aber noch nie wirklich mit Perl gearbeitet. Hat jemand vielleicht zufälligerweise ein solches Script oder auch nur ne kleine Idee die mir weiterhelfen könnte?

Danke und Gruß

P.S.: Das Programm Anonlog habe ich schon probiert, jedoch kann es nix mit meinen Logs anfangen.

Content-ID: 56455

Url: https://administrator.de/forum/perl-alternative-zu-sed-streams-editor-56455.html

Ausgedruckt am: 23.12.2024 um 04:12 Uhr

6890
6890 15.04.2007 um 16:52:50 Uhr
Goto Top
hi,

kanst mal paar informationen rausrücken, wieviele user (kb300-kb90000??) und ob du einfach nur etwas zum anonymisieren brauchst oder ob das noch andere dinge erfüllen soll??

mfg
LordMoorhuhn
LordMoorhuhn 15.04.2007 um 19:25:54 Uhr
Goto Top
Servus,

Userzahlen sind bei 370 in etwa. Also eine Logfile von einem Tag hat ca. 12MB. Es soll lediglich anonymisieren. Mehr net.
6890
6890 15.04.2007 um 19:30:11 Uhr
Goto Top
Servus,

Userzahlen sind bei 370 in etwa. Also eine
Logfile von einem Tag hat ca. 12MB. Es soll
lediglich anonymisieren. Mehr net.

ok und sind die nutzer kenunngen immer kbxxx oder kann da auch mal heinz oder klaus stehen??

mfg
LordMoorhuhn
LordMoorhuhn 15.04.2007 um 19:31:53 Uhr
Goto Top
sie fangen immer mit kb37 an

also kb37882
kb37489 usw.
6890
6890 15.04.2007 um 20:12:19 Uhr
Goto Top
hallo,

hab mal was geschrieben, müsste funktionieren:
#!/usr/bin/perl

use strict;
use warnings;

my %user;
my $logfile = "log.txt";  
my $increment = 1;
my @logfile;

open(LOGFILE,"<$logfile") || die "$!";  
@logfile = <LOGFILE>;
close(LOGFILE);

chomp(@logfile);

foreach(@logfile) {
    if($_ =~ m/(kb37\d{1,3})/ig) {
        my $cache = $1;
        unless(exists($user{$cache})) {
            $user{$cache} = "user$increment";  
            $increment++;
        }
        $_ =~ s/$cache/$user{$cache}/gi;
    }
}

open(LOGFILE,">$logfile") || die "$!";  
print LOGFILE join("\n", @logfile);  
close(LOGFILE);

exit(0);

das liest als erstes das logfile ein, geht es dann zeile für zeile durch und schaut ob das kbxxxxx drinne is, schreibt sich das raus und in ein assoziatives feld, vergibt danach den namen userx und macht das halt für das ganze logfile und schreibt das neue logfile am ende zurück.

jow kommisch erklärt, aber is so face-smile

wenn fragen sind melden...

mfg
LordMoorhuhn
LordMoorhuhn 15.04.2007 um 20:14:02 Uhr
Goto Top
is ja klasse!!!

Probiers morgen in der Arbeit gleich aus und geb laut. Großes Danke schonmal!!!!
LordMoorhuhn
LordMoorhuhn 16.04.2007 um 08:05:40 Uhr
Goto Top
so guten Morgähn,

hab jetz dein script mal probiert. Er findet meine Logfile und tüddelt auch, aber er schreibt leider die log.txt nicht zurück. Die ursprüngliche Log bleibt auch unverändert.
6890
6890 16.04.2007 um 09:52:23 Uhr
Goto Top
so guten Morgähn,

hab jetz dein script mal probiert. Er findet
meine Logfile und tüddelt auch, aber er
schreibt leider die log.txt nicht
zurück. Die ursprüngliche Log
bleibt auch unverändert.

hmm was is mit lese schreib rechten??
kommt da gar keine fehlermeldung??
läuft das script bis zum ende durch??

mfg
LordMoorhuhn
LordMoorhuhn 16.04.2007 um 10:18:42 Uhr
Goto Top
Oh Herr lass Hirn vom Himmel regnen. Ich Depp hatte nen Schreibfehler drin. Die Sache klappt einwandfrei!!!!

Ganz großes Dankeschön. Echt spitze...

Jetz hoff ich nur noch das mein Analog des so frisst. Aber das is ja andre Geschichte.

Schöne Woche wünsche ich dir!
6890
6890 16.04.2007 um 10:37:43 Uhr
Goto Top
Oh Herr lass Hirn vom Himmel regnen. Ich Depp
hatte nen Schreibfehler drin. Die Sache
klappt einwandfrei!!!!

Ganz großes Dankeschön. Echt
spitze...


na is doch toll wenn ich helfen konnte...
kontonummer schick ich per pn face-wink

Schöne Woche wünsche ich dir!

hmm...
hab ich was verpasst oder is heut ni monatg face-big-smile

mfg
LordMoorhuhn
LordMoorhuhn 16.04.2007 um 11:00:14 Uhr
Goto Top
tu das ;) Ich hab hier viele Konten zum Geld verschicken wos nicht auffallen würde :D


Noch eine kleine Bitte wenns nicht zu viel Aufwand ist. Ich habe hier so ca. 100 Log dateien die wie folgt aussehen:
access.log.<datum> also access.log.0104, access.log.0204, access.log.0304, usw.

Könntest du in dem Script einfügen dass er sich alle logs, die mit access.log.* beginnen, sucht und diese automatisch anonymisiert? So würde ich mir das manuelle eingeben einer jeden datei ersparen (wobei ich schon 20 habe... ;) )

Mist jetz fällt mir auf dass die ganze Statistik falsch ist, sobald ich mehrere Logs habe. Ich müsste theoretisch vorher die User vergeben, also kb37227 ist User1, kb37558 ist User2 usw.. Könntest mir ein Beispiel geben? Damit ich das dann auf alle User ausweiten kann.

Wenn nich wärs auch nicht schlimm. Danke jedenfalls für die bisherige Hilfe
6890
6890 17.04.2007 um 11:38:07 Uhr
Goto Top
huhu,

pass uff ich kugg heut abend mal wenn ich zeit hab.
dann mach das mit dem access.log glei mit...

mfg
LordMoorhuhn
LordMoorhuhn 17.04.2007 um 14:12:10 Uhr
Goto Top
spitze! Dankeeee!!!!
Geb mir mal paar Ideen wie ich mich revanchieren könnte face-smile
6890
6890 17.04.2007 um 14:45:18 Uhr
Goto Top
spitze! Dankeeee!!!!
Geb mir mal paar Ideen wie ich mich
revanchieren könnte face-smile

Wuahahhaha also:

  • Audi A6 3.0 TDI Quattro S-Line (schwarz) oder
  • Suzuki GSX 600 R (Matt-Schwarz)
  • Nixon "The Ceramic Player" oder
  • Es Koston 3 schwarz-rot oder
  • und und und

hoffe das warn genug ideen für den anfang face-wink
LordMoorhuhn
LordMoorhuhn 18.04.2007 um 09:42:06 Uhr
Goto Top
ich schau mal was unsere Schwarzgeldkonten hergeben ;)
6890
6890 23.04.2007 um 19:32:52 Uhr
Goto Top
hi,

sach ma was mir grad auffällt...

wenn du ne feste zuweisung von zb kb37228 ==> user1 usw machst, isses eigentlich nich mehr annonymisiert face-big-smile

is ja im endeffekt dann nur ein alias...

so setzt mich jetzt ma an die anderen sachen...

mfg
6890
6890 23.04.2007 um 19:57:07 Uhr
Goto Top
sooo...

is das drinne was de wolltest:
#!/usr/bin/perl

use strict;
use warnings;

my %user = ( "kb37133" => "user1",  
             "kb37144" => "user2", );  
           # und immer so weiter ...
           # musste halt so für alle eintragen

# hier liegen die logfiles in dem dir...
my $logdir = "/home/mydir/logs";  
my $increment = 1;
my @logfile;

opendir(LOGDIR,"$logdir") || die "$!";  
foreach(readdir(LOGDIR)) {
     if($_ =~ m/access.log/gi) {
        open(LOGFILE,"<$logdir/$_") || die "$!";  
        @logfile = <LOGFILE>;
        close(LOGFILE);

        chomp(@logfile);

        foreach my $logf (@logfile) {
            if($logf =~ m/(kb37\d{1,3})/ig) {
                my $cache = $1;
                $logf =~ s/$cache/$user{$cache}/gi if exists $user{$cache};
            }
        }

        open(LOGFILE,">$logdir/$_") || die "$!";  
        print LOGFILE join("\n", @logfile);  
        close(LOGFILE);
    }
}
closedir(LOGDIR);
exit(0);

is hoffe ich selbsterklärend ;-D

wenn fragen sind...

mfg
LordMoorhuhn
LordMoorhuhn 24.04.2007 um 00:52:11 Uhr
Goto Top
Danke face-smile morgen glei probieren.

Es ist in dem sinne anoymisiert dass jemand andres nicht mehr sehen kann hinter welchem user welche person steckt. dass ich es weiß is klar.

Nochmal großes Danke!!!!
LordMoorhuhn
LordMoorhuhn 28.04.2007 um 20:31:41 Uhr
Goto Top
Also ich bin mittlerweile nicht mehr da tätig aber habs meinem ehemaligen Chef gegeben. Der meint es würde klappen. Also ganz großes danke!