use Text::CSV; my $csv = Text::CSV->new({sep_char => ";"}); open my $fh, "<", "csv1" or die $!; open my $out, ">", "csv2" or die $!; chomp(my $header1 = <$fh>); my $header2 = "jahr;name"; # überschrift der neuen datei my %headers1 = do { my $i = 0; map { $_ => $i++ } split /;/, $header1; }; my @headers2 = map { $headers1{$_} } split /;/, $header2; print $out "$header2\n"; # neue überschrift ausgeben while (my $line = <$fh>) { my $status = $csv->parse($line) or die $csv->error_diag; my @columns = $csv->fields(); $status = $csv->combine(@columns[@headers2]) or die $csv->error_diag; $line = $csv->string(); print $out "$line\n"; }