Это awk
может сделать: (поля, разделенные табуляцией)
PS это не удастся, если поле отсутствует, все должны быть в порядке.
awk -F: 'NR==1 {print $1,$3,$5,$7,$9} {print $2,$4,$6,$8,$10}' RS= ORS='\n' OFS='\t' file
Event_date Error_code Event_type Duration Missing_provider_id
20190512044638 5858 GPRS data 772 46009
20190512044638 780678
20190512064535 5858 GPRS data 2172 722310
Более общее решение:
awk -F: 'NR==1 {print $1,$3,$5,$7,$9} {for(i=2;i<=NF;i+=2) printf "%s\t",$i;print ""}' RS= ORS='\n' OFS='\t' file
Event_date Error_code Event_type Duration Missing_provider_id
20190512044638 5858 GPRS data 772 46009
20190512044638 780678
20190512064535 5858 GPRS data 2172 722310
NR==1 {print $1,$3,$5,$7,$9}
может быть установлен на некоторый статический заголовок, такой как NR==1 {print "F1","F2","F3","F4","F5"}
etc