#!/usr/bin/perl -w use strict; my @csv_order = qw ( exchangeIdentity callIdentificationNumber); my %defaults = map {$_ => ""}@csv_order; my %curr_record=%defaults; while () { if (/CME20CP6.CallDataRecord/.../^\s*$/) { if ( my ($var,$val) = ($_ =~ m/^\s*(\S+)\s+:\s+(\S+)\s*$/) ) { $curr_record{$var}=$val if exists ($curr_record{$var}); } if (/^\s*$/) #remember to add a blank line at end of file { dump_csv_line(); %curr_record=%defaults; } } } sub dump_csv_line { print join (",",map{$curr_record{$_}}@csv_order)."\n"; } __END__ Prints: "DWLCCN6",'6CBFD7'H "DWLCCN6",'6CC99C'H ,'699999'H __DATA__ CME20CP6.CallDataRecord.uMTSGSMPLMNCallDataRecord callIdentificationNumber : '6CBFD7'H exchangeIdentity : "DWLCCN6" gSMCallReferenceNumber : '9103770001'H switchIdentity : '0001'H recordSequenceNumber : '39D42E'H date : '1409071F'H serviceFeatureCode : '0002'H timeForEvent : '131A01'H CME20CP6.CallDataRecord.uMTSGSMPLMNCallDataRecord callIdentificationNumber : '6CC99C'H exchangeIdentity : "DWLCCN6" switchIdentity : '0001'H recordSequenceNumber : '39D42F'H date : '1409071F'H serviceFeatureCode : '0002'H timeForEvent : '131A20'H CME20CP6.CallDataRecord.uMTSGSMPLMNCallDataRecord callIdentificationNumber : '699999'H