Thread Linux anonymisierer
(35 answers)
Opened by sd911 at 2016-09-19 08:10
Weiterer Versuch dir zu helfen.
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 #!/usr/bin/perl use strict; use warnings; use 5.010; use utf8; use Getopt::Long; sub help { print <<TXT; $0 Version 0.1 Ersetzt in separiereten Datenzeilen den Originalinhalt von Datenspalten durch einen anderen. Das Programm funktioniert mit Umleitung auf der Kommandozeile. Aufruf: $0 -F feldnr=ersatz < eingabedatei > ausgabedatei $0 -FS=separator -F feldnr=ersatz < eingabedatei > ausgabedatei oder $0 -? Hinweis: Feldnummern fangen bei 0 an! Beispiele für Parameter: -? die Hilfe -h die Hilfe -FS=; benutzt den Strichpunkt als Trenner für die Datenspalten -F 3="" ersetzt das vierte Feld durch leeren Inhalt bei Zeichenketten oder Zufallszahlen bei Zahleninhalt -F 9= ersetzt das neunte Feld durch leeren Inhalt bei Zeichenketten oder Zufallszahlen bei Zahleninhalt -F 1=!!! ersetzt das zweite Feld durch !!! -F 0=XXXXXXX -F 4=???? ersetzt das erste Feld durch XXXXXXX und das fünfte druch ???? -F 0=XXX -F 9="Blah Blubb" ersetzt das erste Feld durch XXX und das 10te durch 'Blah Blubb' TXT exit 255; } my @feldparameter; my $separator; GetOptions( 'F=s' => \@feldparameter, # -F Spaltenparameter für Spalte + Ersetzung 'FS=s' => \$separator, # -FS ist Feld/Spalten-Separator 'h|?' => \&help # -? ist Hilfe ); $separator //= ';'; # Defaultseparator ist der Strichpunkt ### Datenzeilen einlesen while ( my $line = <> ) { my @daten_zeile = split /$separator/, $line; # separierte Datenzeile in einzelen Werte chomp @daten_zeile; ### in Datenzeilen ersetzen for my $feld_parameter (@feldparameter) { # für alle Feldparameter my ( $FELDNR, $WERT ) = split /=/,$feld_parameter; # Parameter in Feldnr und -wert $WERT //= ""; # falls Parameterwert undefiniert dann leere Zeichenkette zuweisen if ( $FELDNR < scalar @daten_zeile ) { # Prüfen ob Feldnr gültig if ( $daten_zeile[$FELDNR] =~ /\D/ ) # wenn Daten darin nicht nur Ziffern enthalten { $daten_zeile[$FELDNR] = $WERT; # dann mit Wert aus Parameter ersetzen } else { # Daten sind alles Ziffern if ( not length $WERT ) { # falls neuer Wert leere Zeichenkette $WERT = int( rand(1_000_000_000) ); # dann durch Zufallszahlen ersetzen } $daten_zeile[$FELDNR] = $WERT; # neuen Wert in Datenspalte speichern } } else { die "Paramater '$feld_parameter' ist ungültig/zu groß!\n" . "Es existieren nur Feldnummern von 0.." . scalar @daten_zeile; } } #### neue Daten wieder ausgeben print join( $separator, @daten_zeile ) . "\n"; } Ich hoffe, das ist jetzt was du wolltest. ;) Last edited: 2016-09-21 15:27:50 +0200 (CEST) |