Расширенное знание длины каждого блока избавляет нас от незначительных трудностей, связанных с обработкой граничного условия, которое в противном случае потребовало бы блока END с реплицированной функциональностью.
Я не сторонник такого подхода в пользу принятого ответа Жиля. Я просто представляю его, чтобы продемонстрировать альтернативный подход, который при решении сложных проблем (это не одна из них) может привести к значительному снижению сложности (за счет ввода-вывода и, возможно, памяти).
a
- это индексированный по имени массив длин блоков. n
- количество оставшихся строк в блоке:
awk -F, '
FNR==NR {a[$1]++; next}
n {print " "$2}
!n {print; n=a[$1]}
!--n {print "\n"}
' ORS= data data