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
use 5.020; use warnings; my $device_csv = <<EOF; name;ip;kuerzel;vrf;umgebung adresse01;192.168.209.11;Server01;;buero adresse02;192.168.209.72; Server02;; buero adresse03;192.168.227.72; Server03;; buero adresse04;192.168.195.11; Server04;; buero adresse05;192.168.223.11; Server05;; buero adresse06;192.168.197.11; Server06;; buero adresse07;192.168.197.72; Server07;; buero EOF my @areas = qw(area1 area2 area3); my $ausgabe = 'Ausgabe.csv'; my @lines = split /\n/,$device_csv; my @headers = split /\s*;\s*/, shift @lines; # Erste Zeile brauchen wir nicht my @data = map [ split /\s*;\s*/ ], @lines; # Array of Arrays! open (my $ehe,'>',$ausgabe) or die "Fehler beim Oeffnen der Datei '$ausgabe': '$!'\n"; say $ehe "Ip;destination;vrf;kuerzel;umgebung"; for my $area (@areas) { # fuer alle drei Areas my @brides = @data; # und alle Adressen my @grooms = @data; # zu allen Partnern for my $bride (@brides) { shift @grooms; # nur "vorwärts" verknüpfen MARRIAGE: for my $groom (@grooms) { my $ip = $bride->[1]; my $destination = $groom->[1]; my $kuerzel = $groom->[2]; my $vrf = $area; # ?? soll's das sein? my $umgebung = $groom->[4]; # ?? Das fehlt im Beispiel? say $ehe "$ip;$destination;$vrf;$kuerzel;$umgebung"; } } } close $ehe; say "Geschafft.";
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
use 5.020; use warnings; open FILE,'<',"Eingabe.csv" or die "Can't open data $!\n"; my @lines = (); while (my $zeile = <FILE>) { push @lines, $zeile; } close (FILE); my @areas = qw(area1 area2 area3); my $ausgabe = 'Ausgabe.csv'; #my @lines = split /\n/,$device_csv; my @headers = split /\s*;\s*/, shift @lines; # Erste Zeile brauchen wir nicht my @data = map [ split /\s*;\s*/ ], @lines; # Array of Arrays! open (my $ehe,'>',$ausgabe) or die "Fehler beim Oeffnen der Datei '$ausgabe': '$!'\n"; say $ehe "Ip;destination;vrf;kuerzel;umgebung"; for my $area (@areas) { # fuer alle drei Areas my @brides = @data; # und alle Adressen my @grooms = @data; # zu allen Partnern for my $bride (@brides) { shift @grooms; # nur "vorwärts" verknüpfen MARRIAGE: for my $groom (@grooms) { my $ip = $bride->[1]; my $destination = $groom->[1]; my $kuerzel = $groom->[2]; my $vrf = $area; # ?? soll's das sein? my $umgebung = $groom->[4]; # ?? Das fehlt im Beispiel? say $ehe "$ip;$destination;$vrf;$kuerzel;$umgebung"; } } } close $ehe; say "Geschafft.";
1
2
$zeile =~ s/[\r\n]+$//; # brav Zähne putzen, ähhm… entferne Zeilenenden
push @lines, $zeile; # und nun brav ins Array husch husch… ;)