# Ausgabedatei der Zusammenfassung (csv): my $sum_out='zusammenfassung.csv'; # das gehört zu den anderen Definitionen am Anfang #... code ... # Zusammenfassung #printf ("%s+%s %u\n",split(/-!-/,$_),$anzahl{$_}) for (sort keys(%anzahl)); # ab hier neuer Code: # Ziel: # eine Matrix der Gezählten Kombinationen # der in den Dateien enthaltenen Ausdrücken # Liste aller gefundenen Ausdrücke # und die Postion, die sie in der Matrix einnehmen sollen my %positions; my @muster; for my $pair (sort keys(%anzahl)) { for(split(/-!-/,$pair)) { # wenn der Ausdruck schon eine Postion hat, dann überspringen next if exists $positions{$_}; # Dem Ausdruck eine Position in der zukünftigen Matrix zuweisen push(@muster,$_); $positions{$_}=$#muster; } } # die Matrix erstellen my @matrix; for my $pair (keys(%anzahl)) { my ($m1,$m2)=split(/-!-/,$pair); my $count=$anzahl{$pair}; # die Position in der Matrix ermitteln my $pos1=$positions{$m1}; my $pos2=$positions{$m2}; # Wert in die Matrix schreiben $matrix[$pos1][$pos2]+=$count; } # die Ausgabe als CSV: # Einträge mit ";" getrennt, Zeilenenden sind "\n"; open(my $fh, '>', $sum_out) or die("ERROR open $sum_out ($!)\n"); # Zeilen/Spalten beschreiben: print $fh 'Muster;',join(';',@muster)."\n"; # matrix durchgehen: for my $pos1 (0..$#muster) { # Wenn eine Kombination nicht existiert, den Wert auf 0 setzen for my $pos2 (0..$#muster) { $matrix[$pos1][$pos2]=0 unless($matrix[$pos1][$pos2]); } # Muster angeben: print $fh $muster[$pos1].";"; # die Ausgabe erzeugen print $fh join(';',@{$matrix[$pos1]})."\n"; } close($fh);