my %newhash; foreach my $attribute (sort keys %sorted_by_attribute) { my $individual_values = $sorted_by_attribute{$attribute}; foreach my $value (keys %$individual_values) { my @systems = @{$sorted_by_attribute{$attribute}{$value}}; foreach $system (@systems) { my $key = $HoH{$system}{'Group'}; my $str = sprintf "%s = > %s\n", $HoH{$system}{'System Name'}, $value; push @{ $newhash{$attribute}{$key} }, $str; } } } print Dumper (\%newhash);