#!/usr/bin/env perl use strict; use warnings; use constant { REC_SEP => "\n//\n", KEY_SEP => "\t", OUT_FMT => "%s\n%s\n%s\n//\n", }; my %uniq; { local $/ = REC_SEP; while () { chomp; my ($id, $s1, $s2) = split; $uniq{join KEY_SEP, $s1, $s2} = $id; } } printf OUT_FMT, $uniq{$_}, split(KEY_SEP) for keys %uniq; __DATA__ nick AAAAAAAAAA BBBBBBBBBB // george EGRGERHTETEHTHR VFRTTHTRRHTE // andreas AAAAAAAAAA BBBBBBBBBB // thomas EWTRYTUYJTHT CEWWEQRWT$G // peter EGRGERHTETEHTHR VFRTTHTRRHTE // #### andreas AAAAAAAAAA BBBBBBBBBB // peter EGRGERHTETEHTHR VFRTTHTRRHTE // thomas EWTRYTUYJTHT CEWWEQRWT$G // #### ... for sort { $uniq{$a} cmp $uniq{$b} } keys %uniq;