# cat vm.csv vm_name,vm_cluster vm1,fd1 vm2,fd2 vm3,fd3 vm4,fd4 #### # cat vfiler_fd.csv vm_name,vFiler_IP,vFiler_cluster vm3,1.1.1.3,fd2 vm4,1.1.1.4,fd1 vm1,1.1.1.1,fd4 vm2,1.1.1.2,fd3 #### vm_name,vm_cluster,vFiler_IP,vFiler_cluster vm1,fd1,1.1.1.1,fd4 vm2,fd2,1.1.1.2,fd3 . . ....etc. #### use strict; use Text::CSV; use Class::CSV; my $report_csv = Class::CSV->new ( filename => "final.csv", fields => [qw/VM_Name VM_Cluster vFiler_IP vFiler_Cluster MisMatch/], ); my $vm_mapping = Text::CSV->new ({ binary => 1}); my $vfiler_mapping = Text::CSV->new ({ binary => 1 }); open my $vm, "<:encoding(utf8)", "vm.csv" ; open my $vfiler, "<:encoding(utf8)", "vfiler_fd.csv"; while (my $vm_row = $vm_mapping->getline ($vm)) { while (my $vfiler_row = $vfiler_mapping->getline ($vfiler) ) { if ( $vm_row->[0] eq $vfiler_row->[0] ) $report_csv->add_line( { VM_Name => $vm_row->[0], VM_Cluster => $vm_row->[1], vFiler_IP => $vfiler_row->[1], vFiler_Cluster=> $vfiler_row->[2], MisMatch => "huhuhhuhuhu", } ); next; } next; }