#!/usr/bin/perl use strict; use warnings; chomp(my @fields = split /\t/, <>); my (%domains, %links, %rel, %group); shift @fields; while (<>) { chomp; my ($dom, @values) = split /\t/, $_, -1; @{ $domains{$dom} }{@fields} = @values; } my @dlist = my @domain_list = keys %domains; while (@dlist) { my $d1 = shift @dlist; for my $d2 ($d1, @dlist) { $links{$d1}{$d2} = [ grep { $domains{$d1}{$_} eq $domains{$d2}{$_} and $domains{$d1}{$_} ne "" and $domains{$d1}{$_} ne "Private, Registration" and $domains{$d1}{$_} ne "Domains by Proxy, Inc." and $domains{$d1}{$_} !~ /^DomainsByProxy.com/i } @fields ]; } } for my $d1 (@domain_list) { $rel{$d1} ||= $d1; $group{ $rel{$d1} }{$d1} = 1; for my $d2 (grep { @{ $links{$d1}{$_} } > 1 } keys %{ $links{$d1} }) { $rel{$d2} ||= $d1; $group{ $rel{$d2} }{$d2} = 1; } } for my $d1 (sort { keys(%{ $group{$b} }) <=> keys(%{ $group{$a} }) } keys %group) { print "GROUPED TO $d1\n"; for my $d2 (sort keys %{ $group{$d1} }) { print " $d2 (via: @{ $links{$d1}{$d2} })\n"; } }