Parsing and filtering multiline text into comma separated line

I have a log file that contains several reports with following format.
<Start of delimiter> Report1 header
Report1 header continue
Report1 header continue

   Record1 header
   Record1 header continue
   Record1 header continue

field1 field2 field3 field4
------ ------ ------ ------
value1 value2 value3 value4

   Record1 header
   Record1 header continue
   Record1 header continue

field5 field6 field7 field8 field9
------ ------ ------ ------ ------
value5 value6 value7 value8 value9
Record1 header
Record1 header continue
Record1 header continue
field10 field11 field12
------ ------ ------
value10 value11 value12
Report1 Footer
<End of delimiter>
<Start of delimiter> Report2 header
Report2 header continue
Report2 header continue

   Record2 header
   Record2 header continue
   Record2 header continue

field13 field14
------ ------
value13 value14

   Record2 header
   Record2 header continue
   Record2 header continue

field15 field16 field17 field18 field19
------ ------ ------ ------ ------
value15 value16 value17 value18 value19

Report2 Footer
<End of delimiter>

field1, field2 etc are various names and are all different and not necessarily written as field1, field2

I am interested in parsing the log file so that final output looks like this
value1,value2,value3,value4,value5,value6,value7,value8,value9,value10,value11,value12,value13,value14,value15,value16,value17,value18,value19

I would appreciate if people throw in some ideas on how to filter the log file so that only comma separated values are printed in single line.

You could scan for ------ and then print the next line:

awk '/-{6}/{getline;$1=$1;print}' OFS=, ORS= infile

to print a linefeed after the output:

awk '/-{6}/{getline;$1=$1;print} END{print RS}' OFS=, ORS= infile
1 Like