#!/usr/bin/perl use strict; use warnings; use 5.010; use utf8; use Getopt::Long; sub help { print < 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"; }