новый вопрос
вниваю разные значения в двух файлах CSV. Если у меня нет соответствия, я хочу добавить (или обновить) мои устройства в моей Системе управления.
output1.csv (имя, ip) - основная система
Test1, 10.56.7.13
Test2, 10.56.4.14
Test3, 10.56.5.15
output2.csv (id, name, ip) - Вторичная система
1234,Test1, 10.56.7.13
1235,Test2, 10.56.4.10
Мой результат должен быть: я ничего не делаю сTest1
(потому что это уже в системе 2), я должен обновитьTest2
(потому что теперь у меня есть другой IP-адрес), и я должен добавитьTest3
потому что у меня его нет во вторичной системе.
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;
Я получаю сообщение об ошибке в этой строкеif ( $first{$name_first} e.g. $first{$name_second}
, Я думаю, что мое сравнение неверно - есть ли лучший способ сделать это?
Еще один вопрос: для UPDATE (PUT Request) мне нужны отдельные ключи. Потому что мне нужен мойid
вURL
и мне нужно положить вXML template
name
а такжеipaddress
, это должно быть добавлено. Могу ли я сделать это таким образом?
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";