2015-12-14 78 views
1

我有一個多維散列,我在屏幕上打印,我想將散列轉換爲CSV格式的數據。我的腳本將多維散列轉換爲csv

$VAR1 = { 
      '1' => { 
        'EVENT_NAME' => '"x1"', 
        'NV_MANAGED_OBJECT_INSTANCE' => '"SubNetwork=ONRM_RootMo,SubNetwork=AXE,ManagedElement=WBSC1,BssFunction=BSS_ManagedFunction,BtsSiteMgr=WV5619"', 
        'EVENT_TYPE' => '"x5"', 
        'NV_MANAGED_OBJECT_CLASS' => '"BtsSiteMgr"', 
        'AdditionalText_Line03' => '"MO         RSITE   ALARM SLOGAN"', 
        'NV_SPECIFIC_PROBLEM' => '"RADIO X-CEIVER ADMINISTRATION MANAGED OBJECT FAULT"', 
        'ResynchEvent' => '"false"', 
        'SubNetwork' => '"ONRM_RootMo"', 
        'SubNetwork_0' => '"ONRM_RootMo"', 
        'NV_PROBABLE_CAUSE' => '"0"', 
        'AdditionalText_Line04' => '"RXOCF-87       WV5619   BTS EXTERNAL"', 
        'RawCaptureTimeStamp' => '1449806147', 
        'BssFunction' => '"BSS_ManagedFunction"', 
        'DOMAIN_NAME' => '"ALARM_IRP_VERSION_1_1"', 
        'AdditionalText_Line02' => '"MANAGED OBJECT FAULT"', 
        'NV_PROPOSED_REPAIR_ACTIONS' => '""', 
        'NV_ACK_TIME' => '"12/11/15 4:55:45 AM"', 
        'AdditionalText_Line01' => '"RADIO X-CEIVER ADMINISTRATION"', 
        'NV_ACK_STATE' => '"2"', 
        'NV_SYSTEM_DN' => '"Ericsson OSS IRPAgent"', 
        'ManagedElement' => '"WBSC1"', 
        'SubNetwork_1' => '"AXE"', 
        'BtsSiteMgr' => '"WV5619"', 
        'NV_EVENT_TIME' => '"12/11/15 4:55:00 AM"', 
        'AdditionalText_Line06' => '"-ProbableCause(OSS)=Different causes possible for same message"', 
        'AdditionalText_LineCount' => '"7"', 
        'AdditionalText_Line05' => '"END"', 
        'AdditionalText_Line00' => '"*** ALARM 505 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0455"', 
        'NV_ADDITIONAL_TEXT' => '"*** ALARM 505 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0455\\nRADIO X-CEIVER ADMINISTRATION\\nMANAGED OBJECT FAULT\\n\\nMO         RSITE   ALARM SLOGAN\\nRXOCF-87       WV5619   BTS EXTERNAL\\n\\nEND\\n-ProbableCause(OSS)=Different causes possible for same message"', 
        'NV_NOTIFICATION_ID' => '"2267705"', 
        'AdditionalText_Line07' => '"-ProbableCause(OSS)=Different causes possible for same message"', 
        'NV_ACK_USER_ID' => '""', 
        'NV_ALARM_ID' => '"55079020"', 
        'NV_PERCEIVED_SEVERITY' => '"4"' 
       }, 
      '0' => { 
        'EVENT_NAME' => '"x4"', 
        'NV_MANAGED_OBJECT_INSTANCE' => '"SubNetwork=ONRM_RootMo,SubNetwork=AXE,ManagedElement=WBSC1,BssFunction=BSS_ManagedFunction,BtsSiteMgr=WV5619"', 
        'EVENT_TYPE' => '"x5"', 
        'NV_MANAGED_OBJECT_CLASS' => '"BtsSiteMgr"', 
        'AdditionalText_Line03' => '"MO         RSITE   ALARM SLOGAN"', 
        'NV_SPECIFIC_PROBLEM' => '"RADIO X-CEIVER ADMINISTRATION MANAGED OBJECT FAULT"', 
        'ResynchEvent' => '"false"', 
        'SubNetwork' => '"ONRM_RootMo"', 
        'SubNetwork_0' => '"ONRM_RootMo"', 
        'NV_PROBABLE_CAUSE' => '"0"', 
        'AdditionalText_Line04' => '"RXOCF-87       WV5619   BTS EXTERNAL"', 
        'RawCaptureTimeStamp' => '1449806146', 
        'BssFunction' => '"BSS_ManagedFunction"', 
        'DOMAIN_NAME' => '"ALARM_IRP_VERSION_1_1"', 
        'AdditionalText_Line02' => '"MANAGED OBJECT FAULT"', 
        'NV_PROPOSED_REPAIR_ACTIONS' => '""', 
        'NV_ACK_TIME' => '"12/11/15 4:55:45 AM"', 
        'AdditionalText_Line01' => '"RADIO X-CEIVER ADMINISTRATION"', 
        'NV_ACK_STATE' => '"2"', 
        'NV_SYSTEM_DN' => '"IRPAgent"', 
        'ManagedElement' => '"WBSC1"', 
        'SubNetwork_1' => '"AXE"', 
        ' Status_TicketType' => '0', 
        'BtsSiteMgr' => '"WV5619"', 
        'NV_EVENT_TIME' => '"12/11/15 4:55:00 AM"', 
        'AdditionalText_Line06' => '"-ProbableCause(OSS)=Different causes possible for same message"', 
        'AdditionalText_LineCount' => '"7"', 
        'AdditionalText_Line05' => '"END"', 
        'AdditionalText_Line00' => '"*** ALARM 504 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0451"', 
        'NV_ADDITIONAL_TEXT' => '"*** ALARM 504 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0451\\nRADIO X-CEIVER ADMINISTRATION\\nMANAGED OBJECT FAULT\\n\\nMO         RSITE   ALARM SLOGAN\\nRXOCF-87       WV5619   BTS EXTERNAL\\n\\nEND\\n-ProbableCause(OSS)=Different causes possible for same message"', 
        'NV_NOTIFICATION_ID' => '"2267704"', 
        'NV_ACK_USER_ID' => '""', 
        'NV_ALARM_ID' => '"55079016"', 
        'NV_PERCEIVED_SEVERITY' => '"6"' 
       } 
     }; 

代碼的 示例輸出負責文件遍歷到一個哈希:

my $i=0; 
open my $cap1, $file or die "Could not open $file: $!"; 
while(my $line = <$cap1>) { 
     my @pairs; 
     my $name; 
     my $value; 
     if($line ne ''){ 
       @pairs = split/= /, $line; 
       $name = $pairs[0]; 
       chomp($name); 
       $value = $pairs[1]; 
       chomp($value); 
     } 
     if($name ne '' && $name !~ /^Status_/){ 
       $data{$i}{$name} = $value; 
     } 
     if($name =~ /^RawCaptureTimeStamp/){ 
       $i++; 
     } 
} 
print Dumper \%data; 

請注意:在每一組中的哈希的列是不固定的。它是動態的。 但是,我已經在另一個數組中獲得了所有可能的列名。所以你可以假設我有一個數組文件中的所有列(EVENT_NAME,EVENT_TYPE,...)。使用我需要將現有的散列轉換爲CSV。

回答

3

實測溶液自己:

foreach my $j (sort keys %data) { 
     foreach (@uniqueNames) { 
       if(exists($data{$j}{$_})){ 
         print "$data{$j}{$_},"; 
       } 
       else{ 
         print "\"\"",; 
       } 
     } 
     print "\n"; 
} 

哪裏@uniqueNames是具有從原始散列表中的所有可能的唯一列的陣列。

+0

請小心引用,如果您的值包含引號,則應正確地將它們轉義爲您選擇的CSV格式的引號字符。 – ChatterOne

+0

@ChatterOne正式注意 –