# config: my $field = 0; my $sep = "\t"; $, = $sep; $\ = $/; my %file; # { num, name, $fh } my $fnum = 1; while (<>) { chomp; my @c = split /$sep/o; my( $key, $num ) = defined $c[$field] ? ( $c[$field], $fnum++ ) : ( '(column not present)', 0 ); unless ( $file{$key} ) { $file{$key}{num} = $num; $file{$key}{name} = sprintf 'part.%03d', $file{$key}{num}; -f $file{$key}{name} and die "Sorry, '$file{$key}{name}' exists; won't clobber."; open $file{$key}{fh}, ">", $file{$key}{name} or die "Error opening '$file{$key}{name}' for write - $!"; } print {$file{$key}{fh}} @c; } print $file{$_}{name}, $_ for sort { $file{$a}{num} <=> $file{$b}{num} } keys %file;