use Modern::Perl; my %data; while () { chomp; # newline entfernen my ($k, $v1, $v2) = split /;/; # splitte Datensatz $data{$k} //= [ $v1, $v2//0 ]; # Datenarray setzen falls noch nicht existent $data{$k}->[0] = $v1 if $v1 < $data{$k}->[0]; # setze Minimum aus erstem Wert $data{$k}->[1] = $v2 if length $v2 && $v2 gt $data{$k}->[1]; # setze Maximum aus zweitem Wert $data{$k}->[0] = $v2 if length $v2 && $v2 lt $data{$k}->[0]; # setze Minimum aus zweitem Wert $data{$k}->[1] = $v1 if length $v1 && $v1 gt $data{$k}->[1]; # setze Maximum aus erstem Wert } # Daten wieder ausgeben say join ";",$_,@{$data{$_}} for sort keys %data; __DATA__ 201;215388; 201;48639860;48639869 201;48639870;48639879 201;48639880;48639889 201;48639890;48639899 201;5589000; 201;55890010;55890019 201;55890020;55890029 201;55890100;55890149 201;5589026; 201;5589027; 201;5589028; 201;5589029; 201;55891000;55891999 201;5589219; 201;5589400; 201;5589401; 203;7329283; 203;73297000;73297399 203;7329789; 203;7329900; 203;7329911; 203;7329922; 203;7329988; 2041;7549009; 2041;7549010; 2041;7549011; 2041;7549012; 2041;7549013; 2041;7549014; 2041;7549015; 2041;7549016; 2041;7549017; 2041;7549018; 2041;7549019; 2041;7549027; 2041;7549028; 2041;7549029; 2043;9829006; 2043;9829007; 2043;9829008; 2043;9829009; 2043;9829019; 2043;9829029;