Comparar valores em arquivos csv
Estou comparando valores diferentes em dois arquivos csv. Se eu não corresponder, quero adicionar (ou atualizar) meus dispositivos no meu Sistema de Gerenciamento.
output1.csv (nome, ip) - sistema primário
Test1, 10.56.7.13
Test2, 10.56.4.14
Test3, 10.56.5.15
output2.csv (id, nome, ip) - Sistema secundário
1234,Test1, 10.56.7.13
1235,Test2, 10.56.4.10
Meu resultado deve ser: não faço nada comTest1
(porque já está no sistema 2), devo atualizarTest2
(porque agora tenho um endereço IP diferente) e devo adicionarTest3
, porque eu não o tenho no sistema secundário.
use strict;
use warnings;
use feature qw(say);
use autodie;
use constant {
FILE_1 => "output1.csv",
FILE_2 => "output2.csv",
};
my %first;
my $name_first;
my $ip_first;
open my $output_1, "<", FILE_1;
while ( <$output_1> ) {
chomp;
($name_first, $ip_first) = split /,/; #/
$first{$name_first}=1;
$first{$ip_first}=1;
}
close $output_1;
my %second;
open my $output_2, "<", FILE_2;
while ( <$output_2> ) {
chomp;
my ($id_second,$name_second,$ip_second) = split /,/;
if ( $first{$name_first} && $first{$ip_second} ) {
print "Match found $name_second, $ip_second\n";
if ( $first{$name_first} eq $first{$name_second} &&
$first{$ip_first} ne $first{$ip_second})
{
print "It should be done UPDATE for $name_second\n";
else
print "Devices should be added: $name_first\n"
$second{$name_second}++;
}
}
}
close $output_2;
Estou recebendo um erro nesta linhaif ( $first{$name_first} e.g. $first{$name_second}
. Eu acho que minha comparação está errada - existe uma maneira melhor de fazer isso?
Mais uma pergunta: para UPDATE (PUT Request), preciso de chaves separadas. Porque eu preciso do meuid
noURL
e eu preciso colocarXML template
name
eipaddress
, isso deve ser adicionado. Posso fazer assim?
else {
say "UPDATE need be done for $second{$name}";
my $xml = XML::Twig -> new -> parsefile ( 'template.xml' );
$xml ->set_pretty_print('indented_a');
open ( my $input, '<', 'output2.csv' ) or die $!;
while ( <$input> ) {
chomp;
my $id, my $name, $second{$name} = split /,/;
$xml -> root -> set_att('name', $name );
$xml -> get_xpath('//ipaddress',0) -> set_text($second{$name});
my $uri="https://hostname:9060/ers/config/networkdevice/$id";