Thread bisherige Skriptausgabe soll zusammengeführt werden
(12 answers)
Opened by choff at 2011-10-05 18:14
Hallo choff,
hier ein Script, das ungefähr das tut, was Du vermutlich willst: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #!/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 = <DATA>) { 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 Sicher nicht maximal elegant ... HTH Grüße payx |