Подойдет следующий awk:
awk 'BEGIN{RS="";ORS=",";FS="\n";OFS=""}($1=$1)' file
Это добавляет дополнительный ,
в конце. Вы можете избавиться от этого следующим образом:
awk 'BEGIN{RS="";ORS=",";FS="\n";OFS=""}
{$1=$1;s=s $0 ORS}END{sub(ORS"$","",s); print s}' file
Но то, что произошло сейчас, сделав эту небольшую модификацию, чтобы исключить последнюю ORS
(т.е. запятую), вы должны сохранить всю вещь в памяти. Таким образом, вы можете просто сделать это более скучным и менее элегантным, сохранив полный файл в памяти:
awk '{s=s $0}END{gsub(/\n\n/,",",s);gsub(/\n/,"",s); print s}' file
Следующий sed делает то же самое. Сохраните полный файл в памяти и обработайте его.
sed ':a;N;$!ba;s/\n\n/,/g;s/\n//g' <file>
Тем не менее, есть способ сделать это немного умнее с помощью awk.
awk 'BEGIN{RS=OFS="";FS="\n"}{$1=$1; print (NR>1?",":"")$0}' file