in reply to Identifying duplicates in array or hash based on a subset of data
The OP said, "Normally I would simply use an incrementing hash to detect duplicate entries, looking for any values >1". The code below is essentially that idea, except rather than incrementing a simple scalar, a new element is pushed onto an array.
#!/usr/bin/perl use strict; use warnings; <DATA>; #throw way first line my %ids; #Hash of Array "$type $pos" => @ids while (<DATA>) { my ($id,$type,$pos) = split; push @{$ids{"$type $pos"}}, $id; } foreach my $key (sort keys %ids) { next if @{$ids{$key}} == 1; foreach my $id (@{$ids{$key}}) { print "$id $key\n"; } } =prints: 2 1 11 3 1 11 5 2 5 6 2 5 =cut __DATA__ ID Type Pos 1 1 10 2 1 11 3 1 11 4 1 15 5 2 5 6 2 5 7 2 7
|
|---|