my %sequences; # this will be a hash of arrays while () { @fields = split; for ( my $i=0; $i<@fields; $i+=2 ) { push @{$sequences{$fields[$i]}}, $fields[$i+1]; } } for my $tag ( sort keys %sequences ) { my $i = 0; for my $val ( @{$sequences{$tag}} ) { printf( "%s [ %d ] : %s\n", $tag, $i+1, $sequences{$tag}[$i++] ); } } __DATA__ A 100 B 200 C 400 A 150 C 250 D 550 B 350 A 200 B 300 C 500 A 600 B 700 C 800 D 900