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。
請小心引用,如果您的值包含引號,則應正確地將它們轉義爲您選擇的CSV格式的引號字符。 – ChatterOne
@ChatterOne正式注意 –