что-то типа?
#!/usr/bin/perl
use strict;
my %joined_data = ();
open F_IN1, $ARGV[0] || die "can't open file \"".$ARGV[0]."\"\n";
foreach my $line (<F_IN1>) {
chomp $line;
next if $line eq "";
my ($acc, $name) = split(/\:/, $line);
if (defined $acc) {
if (not defined $joined_data{$acc}) {
$joined_data{$acc} = {};
}
$joined_data{$acc}->{name} = $name;
}
}
close F_IN1;
open F_IN2, $ARGV[1] || die "can't open file \"".$ARGV[1]."\"\n";
foreach my $line (<F_IN2>) {
chomp $line;
next if $line eq "";
my ($email, $acc) = split(/\:/, $line);
if (defined $acc) {
if (not defined $joined_data{$acc}) {
$joined_data{$acc} = {};
}
$joined_data{$acc}->{email} = $email;
}
}
close F_IN2;
foreach my $acc (keys %joined_data) {
print $joined_data{$acc}->{email}, ":", $acc, ":", $joined_data{$acc}->{name}, "\n";
}
идея понятна. нужные поля сможешь добавить.
объём обрабатываемых данных ограничен размерами ОЗУ так что аккуратнее.