Thread Linux anonymisierer (35 answers)
Opened by sd911 at 2016-09-19 08:10

Gast sd911
 2016-09-21 08:44
#185415 #185415
Code: (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/perl


use strict;
use warnings;



use Getopt::Long;


my $name;
my $prename;
my $filename;


my $c50 = '-' x 50;


sub help {
print <<TXT;
!!!! FEHLER !!!!

Aufruf:

ReName -p "Vorname" -n "Name" -f "Dateiname"

Notwendige Parameter sind:

-p oder -n
und -f

Folgende Parameter sind gültig:

-p für Vorname
--vorname

-n für Name
--name

--datei für Dateinamen der Eingabedatei
-f
TXT

exit 255; # Programmabbruch
}


#my %opts = (
# 'vorname|p=s' => \$prename, # Parameter Vorname als String
# 'name|n=s' => \$name, # Parameter Name als String
# 'datei|f=s' =>
# \$filename # Parameter Dateiname der einzulesenden Datei als String
#);

GetOptions(%opts);


if ( not defined($name) and not defined($prename) ) {
help(); # bei fehlenden Parametern Hilfe anzeigen
}

### Eingabedatei öffnen
foreach my $in_fh = (@ARGV) {
#my @daten_zeile = split /#/, $zeile;

my $sum = 0;
open(my $data, '<', $in_fh) or die "Could not open '$in_fh' $!\n";

while (my $line = <$data>) {
chomp $line;

my @fields = split "," , $line;
$out_fh += $fields[2];
}



# Daten des ersten Felds
#my $daten_erstes = $daten_zeile[0];



}
open $in_fh, '<', $filename # im Lesemodus öffnen
or die "Datei '$filename' kann nicht geöffnet werden: $!" ; # bei Fehlschlag Fehler ausgeben

### Ausgabedatei öffnen
my $out_fh;
my $out_filename = "$filename.tmp"; # temporärer Dateiname
open $out_fh, '>', $out_filename # im Schreibmodus öffnen
or die "Datei '$out_filename' kann nicht erzeugt werden: $!" ; # bei Fehlschlag Fehler ausgeben
flock $out_fh, 0;

### Eingabedatei einlesen
#while ( my $line = <$in_fh> ) { # Zeilenweise in Variable $line einlesen
#
# if (length $name # falls Parameter $name vorhanden
# and $line =~ /#\Q$name\E\s*Name#/
# ) # und $name mit möglichen nachfolgenden Leerzeichen in $line vorhanden
# {
# $line =~ s/#\Q$name\E\s*Name/#${c50}Name/
# ; # ersetze das Vorkommen durch den Ersatzstring
# }
#
# if (length $prename # falls Parameter $prename vorhanden
# and $line =~ /#\Q$prename\E\s*Vorname#/
# ) # und $prename mit möglichen nachfolgenden Leerzeichen in $line vorhanden
# {
# $line =~ s/#\Q$prename\E\s*Vorname/#${c50}Vorname/; # ersetze das Vorkommen durch den Ersatzstring
# }

print $out_fh $line; # speichere neue Zeile in Ausgabedatei
}

### Eingabedatei schließen
close $in_fh
or die "Datei '$filename' kann nicht geschlossen werden: $!"; # bei Fehlschlag Programmabbruch mit Fehlermeldung

### Ausgabedatei schließen
close $out_fh
or die "Datei '$out_filename' kann nicht geschlossen werden: $!"; # oder bei Fehlschlag Programmabbruch mit Fehlermeldung

# alte Eingabedatei löschen
#unlink $filename or die "Datei '$filename' kann nicht gelöscht werden!";
# Ausgabedatei in Dateinamen der Eingabedatei umbenennen
#rename ($out_filename, $filename) # umbenennen
# or die "Datei '$out_filename' kann nicht in '$filename' umbenannt werden!"; # oder Programmabbruch mit Fehlermeldung

1;



Also als Vorlage habe ich dein Beispiel Skript genommen und versuche mich gerade daran...
Leider habe ich mit Perl erst vor ein paar Tagen angefangen und bin dementsprechend überfordert.

Nochmal zum Verständnis, hier 10 Zeilen aus der CSV

Code: (dl )
1
2
3
4
5
6
7
8
9
10
V001;62102200100011;6;210;2;20;01;0001;1;06;2016;01;Bergt                                             ;19570103;20160601;99999999;Lenny                                              ;                                                  ;Berlin                                             ;0; ; ;000000000000191022;000000000000149498;
V001;62102200100011;6;210;2;20;01;0001;1;06;2016;02;Bonn ;19551005;20160401;99999999;Lenny2 ; ;Bielefeld ;1; ; ;000000000000191023;000000000000149499;
V001;62102200100011;6;210;2;20;01;0001;1;07;2016;01;Dortmund ;19570103;20160601;99999999;Lenny3 ; ;Leipzig ;0; ; ;000000000000191022;000000000012382652;
V001;62102200100011;6;210;2;20;01;0001;1;07;2016;02;Erwitte ;19551005;20160401;99999999;Lenny4 ; ;Dortmund ;1; ; ;000000000000191023;000000000012382653;
V001;62102200100011;6;210;2;20;01;0001;1;08;2016;01;Berlin ;19570103;20160601;99999999;Lenny5 ; ;Dortmund ;0; ; ;000000000000191022;000000000000149498;
V001;62102200100011;6;210;2;20;01;0001;1;08;2016;02;Berlin ;19551005;20160401;99999999;Lenny6 ; ;Berlin ;1; ; ;000000000000191023;000000000000149499;
V001;62102200100011;6;210;2;20;01;0001;1;09;2016;01;Dortmund ;19570103;20160601;99999999;Lenny7 ; ;Berlin ;0; ; ;000000000000191022;000000000000149498;
V001;62102200100011;6;210;2;20;01;0001;1;09;2016;02;Bergt ;19551005;20160401;99999999;Lenny8 ; ;Bielefeld ;1; ; ;000000000000191023;000000000000149499;
V001;62102200100020;6;210;2;20;01;0002;0;06;2016;01;Berlin ;19711225;20140301;99999999;Lenny9 ; ;Berlin ;0; ; ;000000000000191032;000000000000149500;
V001;62102200100020;6;210;2;20;01;0002;0;06;2016;02;Berlin ;19750407;20120201;99999999;Lenny10 ; ; ;1; ; ;000000000000191033;000000000000149501;


Mit dem Skript soll dann Variabel Spaltenweise etwas anonymisiert werden oder ersetzt werden.

Z.B. der Name(in diesem Beispiel Lenny1 bis Lenny10 und die Orte wie Berlin etc.) durch irgendwelche Buchstaben. Oder am Ende die Kontoverbindungen durch Random Zahlen.


Mein Ansatz war dies über eine foreach Loop zu lösen und die Daten mit Split ansprechbar zu machen.
Aber es scheitert in der Umsetzung....

Man soll das skript so starten 'perlskript.pl meine.csv' und dann noch etwas anhängen welche Spalte jetzt anonymisiert werden soll.

Wäre schön wenn mir jemand etwas helfen könnte

Gruß!
Last edited: 2016-09-21 11:19:20 +0200 (CEST)

View full thread Linux anonymisierer