#!/usr/bin/perl use strict; use warnings; my %elements; # HOH key = ElementId, value = Hashref gemergeter Datensatz # Arrays für die Werte in je einer Zeile my @keys; my @values; # Daten einlesen und HoH befüllen while (my $row = ) { chomp $row; if ($row =~ m/ElementID/) { # eine Key-Zeile @keys = split(/\|/, $row); @values = (); # neue Key-Zeile, daher Values löschen } elsif ($row =~ /\|/) { # eine Value-Zeile @values = split(/\|/, $row); } else { # eine leere Zeile next; } if (@keys and @values) { die "Ungleiche Anzahl keys und values!" unless scalar @keys == scalar @values; my %entry; for my $i (0..$#keys) { # temporärer Hash, weil Id noch nicht bekannt $entry{$keys[$i]}=$values[$i]; } @keys = (); # Die Arrays leeren für den nächsten Datensatz @values = (); die "Keine ElementID!" unless my $id = $entry{'ElementID'}; for my $key (keys %entry) { # Hashref auffüllen $elements{$id}->{$key}=$entry{$key}; } } } # Ausgabe Ergebnis: for my $elementId (keys %elements) { my %entry = %{$elements{$elementId}}; # Hashref dereferenzieren print join("|", keys %entry) . "\n"; print join("|", values %entry) . "\n"; } __DATA__ CreationClassName|ElementName|ElementID|OnTimeInMilliseconds Msvm_ComputerSystem|DevManage|0454C4E6-2C92-41C1-A5FD-D9F145D798D4|1051510957 CreationClassName|DeviceID|LoadPercentage|SystemCreationClassName|ElementID Msvm_Processor|Microsoft:b637f346-6a0e-4dec-af52-bd70cb80a21d\0|0|Msvm_ComputerSystem|0454C4E6-2C92-41C1-A5FD-D9F145D798D4