use strict; use warnings; my %data; while () { my @cols = split; my $col3 = pop @cols; my $key = "@cols"; push @{ $data{$key} }, $col3; } for (keys %data) { print "$_ ", join(',', @{ $data{$_} }), "\n"; } __DATA__ chr1 12345 34567 gene1 chr1 12345 34567 gene2