use Text::CSV_XS "csv";
my $hr = csv (
in => "hr.txt",
key => "samaccountname",
keep_headers => \my @keys,
);
my $aoh = csv (in => "ad.txt", bom => 1, on_in => sub {
my $sam = $_[1]{samaccountname} or die "No name in AD";
my $ahr = $hr->{$sam};
unless ($ahr) {
warn "I got AD data for $sam, not in HR\n";
next;
}
my @diff = map { [ $_, $ahr->{$_}, $_[1]{$_} ] }
grep { $ahr->{$_} ne $_[1]{$_} } @keys;
@diff or return;
say "Changes for samaccount $sam";
printf " %-22s %-27.27s -> %s\n", @$_ for @diff;
});
####
$ perl test.pl
Changes for samaccount barsu991
mail Uttiam.Barski@pulse.org -> William.Barski@pulse.org
title Director of Cooks -> Chief of Cooks
Changes for samaccount walkl003
givenname Lreblemet -> Larry
employeenumber 20178941 ->
mail Lreblemet.Walker@pulse.org -> Larry.Walker@pulse.org
title Head Cook -> Cook
Changes for samaccount karss001
givenname Sovyetk -> Steven
mail Sovyetk.Karsten@pulse.org -> Steven.Karsten@pulse.org
title Dishwasher -> Dishw
physicaldeliveryoffice Kitchen of the World -> Sully's Kitchen
streetaddress 205 Willy B. Temple -> 48720 Belcard
st WI -> IL
postalcode 50987 -> 34567
Changes for samaccount zingk072
givenname Kovon -> Kevin
employeenumber 20113578 ->
symphonyemployeetype IKP ->
mail Kovon.Zingerman@pulse.org -> Kevin.Zingerman@pulse.org
manager cn=manager1,ou=users,ou=Kit ->
Changes for samaccount peizs194
givenname Synthia -> Samantha
sn Smite -> Smith
mail Synthia.Peizer@pulse.org -> Samantha.Smith@pulse.org
title Broiler Man -> Man, Broiler
Changes for samaccount hutcy231
givenname Yello -> Yaren
mail Yello Hutchinson -> Yaren Hutchinson
Changes for samaccount haserz221
sn Haserkrilk -> Hasermann
employeenumber 20125471 ->
mail Zebediah.Haserkrilk@kit.org -> Zebediah.Haserman@pulse.org
telephonenumber -> 555-555-5555
####
my @diff;
my $aoh = csv (in => "ad.txt", bom => 1, on_in => sub {
my $sam = $_[1]{samaccountname} or die "No name in AD";
my $ahr = $hr->{$sam} or die "I got AD data for $sam, not in HR\n";
push @diff, map { [ $sam, $_, $ahr->{$_}, $_[1]{$_} ] }
grep { $ahr->{$_} ne $_[1]{$_} } @keys;
});
csv (in => \@diff, out => "diff.csv");