use strict; my %chr_hash; while() { chomp; my ($chr, $start, $end, $gene) = split(/\t/, $_); my $chr_key = $chr."_".$start."_".$end; #print "$chr_key\n"; push( @{ $chr_hash{$chr_key} }, $gene ); } foreach my $key (keys %chr_hash) { my ($c, $s, $e) = split(/\_/, $key ); print "$c\t$s\t$e\t"; for my $g ( @ {$chr_hash{$key} } ) { print "$g,"; } print "\n"; } __DATA__ chr1 12345 34567 gene1 chr1 12345 34567 gene2