Comparer 2 tableaux de hash sur une clé précise
Bonjour,
je cherche à comparer 2 tableaux de hash afin de connaître les éléments présents dans 1 seul des tableaux, les stocker dans un hash et connaître l'action à faire sur ces éléments.
Mes 2 tableaux de hash ont la même structure, la seule chose que je dois vérifier, c'est la présence d'une valeur de clé précise : hostname.
Un extrait des print Dumper des 2 tableaux :
@data_j :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $VAR1 = [
{
'date_maj' => '2016/05/18',
'etat' => 'Operationnel',
'env' => 'HPROD',
'environnement' => 'DEVELOPPEMENT',
'upm' => 'UPM_XXXXXX',
'hostname' => 'SRV1',
'os' => 'UNX'
},
{
'date_maj' => '2016/05/18',
'etat' => 'Operationnel',
'env' => 'HPROD',
'environnement' => 'DEVELOPPEMENT',
'upm' => 'UPM_XXXXXX',
'hostname' => 'SRV2',
'os' => 'UNX'
},
(...)
] |
@data_w :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $VAR1 = [
{
'date_maj' => '2016/05/18',
'etat' => 'Operationnel',
'env' => 'HPROD',
'environnement' => 'DEVELOPPEMENT',
'upm' => 'UPM_XXXXXX',
'hostname' => 'SRV2',
'os' => 'UNX'
},
{
'date_maj' => '2016/05/18',
'etat' => 'Operationnel',
'env' => 'HPROD',
'environnement' => 'DEVELOPPEMENT',
'upm' => 'UPM_XXXXXX',
'hostname' => 'SRV5',
'os' => 'UNX'
},
(...)
] |
J'aimerais arriver à produire un tableau de hash qui aurait cette tête :
Code:
1 2 3 4 5
| [ HOSTNAME => { env =>,
os =>,
action =>
}
] |
et donc au final avec mon cas :
Code:
1 2 3 4 5 6 7 8 9
| [ 'SRV1' => { env => 'HPROD',
os => 'UNX'
action => 'DEL'
},
'SRV5' => { env => 'HPROD',
os => 'UNX'
action => 'ADD'
}
] |
Parce qu'au final, je dois construire un fichier plat de la sorte :
Code:
1 2
| UNX;SRV1;HPROD;DEL
UNX;SRV5;HPROD;ADD |
J'ai commencé à écrire ceci mais je butte sur la récupération des valeurs des hash. Pour le moment j'ai juste cherché à créer mon troisième hash mais c'est la cata, j'ai vraiment du mal ...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| sub prepare_getlog() {
my ($this,$data) = @_;
my @data_j = $this->{data};
print Dumper (@data_j);
$this->{file} = $this->{histo_dir}.strftime("extraction_assetdb.%y%m%d.csv", localtime(time() - 604800));
$this->parse($this->{file});
my @data_w = $this->{data};
print Dumper (@data_w);
print "Difference entre les 2 hash\n";
foreach my $h (@data_w) {
my %info_getlog;
foreach my $h2 (@{$h}) {
my $cle = $h2->{hostname};
$info_getlog{os} = $h2->{os};
$info_getlog{env} = $h2->{env};
$info_getlog{action} = 'DEL';
$this->{getlog}->{$cle} = \%info_getlog;
}
}
} |
Je ne vous cache pas qu'un petit coup de pouce serait la bienvenue, à minima sur la méthode pour comparer 2 valeurs de clé de 2 hash :)
Merci à vous,
CH