NAME NUMBER COLOR GNAEUS 1 BLUE GNAEUS 1 RED FABIUS 1 BLUE FABIUS 2 YELLOW FABIUS 1 RED .... #### undef my %hash; open IN, $ARGV[0]; while(){ chomp $_; my ($name,$number,$color) = split /\t/, $_; $hash{$name}{$number}{$color}++; } #### my %returnedHash = grep / $hash{"GNAEUS"}{"1"} / keys %hash; foreach my $name (keys %returnedHash){ foreach my $number (keys %{$returnedHash{$name}}){ foreach my $color (keys %{$returnedHash{$name}{$number}}){ print $returnedHash{$name}{$number}{$color}; } } }