#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; my %relative; while (<>) { my ($close_relative, $of_interest) = /(.*)\((.*)\)/ or next; next if $close_relative eq $of_interest; undef $relative{$of_interest}{$close_relative}; } for my $gene (sort keys %relative) { say join ' : ', (keys %{ $relative{$gene} })[0], $gene; }