seq_1: 1 33 gene 1 20 exon 21 27 exon 28 33 exon seq_2: 1 80 gene 1 80 exon seq_3: 1 55 gene 1 30 exon 31 50 exon #### #!/usr/bin/perl -w use strict; my %seq_info; my $in_file = 'datafile.txt'; #open $INFILE, '<', $in_file or die "Could not open '$in_file': $!\n"; #while ( <$INFILE> ) while ( ) { my @record = split( /\s+/, $_ ); push @{ $seq_info{ $record[0] } }, [ @record[1..3] ]; } foreach ( sort keys %seq_info ) { print_seq_chunk( $_, $seq_info{$_} ); print "\n"; } sub print_seq_chunk { my ( $seq_id, $seq_info_ar ) = @_; print $seq_id, ":\n"; printf " %3d %3d %6.6s\n", @$_ foreach @$seq_info_ar; } __DATA__ seq_1 1 33 gene seq_1 1 20 exon seq_1 21 27 exon seq_1 28 33 exon seq_2 1 80 gene seq_2 1 80 exon seq_3 1 55 gene seq_3 1 30 exon seq_3 31 50 exon