Для этого преобразования можно использовать awk
:
$ awk -F' : ' 'BEGIN { print "Name,Age,Country,Sport"; OFS="," }
/^\*+$/ && NR>1 { print a["Name"], a["Age"], a["Country"], a["Sport"];
delete a; next}
{ a[$1]=$2} ' file.rec
Где :
используется как разделитель полей ввода, ,
устанавливается как разделитель выходных полей, ассоциативный массив a
используется для временного хранения значений, регулярное выражение ^ \ * + $
используется для распознавания строки, разделяющие записи, полная запись печатается только после второй разделительной линии (т. е. если количество записей больше 1) и после каждой записи массив очищается.
Переменные $ 1
и $ 2
ссылаются на ключ и значение во входных данных. Оператор next
напрямую переводит обработку на следующую строку.
Отсутствие ключей в ассоциативном массиве приводит к пустым строкам, что соответствует вопросу.