Talvez algo como:
awk '!NF || /%/ {printf "%s", (NR > 1 ? "\n" : "") $0; sep = "\n"; next}
{printf "%s", sep $0; sep = " "}
END {if (NR) print ""}' < file.in > file.out
Observação: estou trabalhando com o arquivo .tex (TeX).
No código TeX, a quebra de linha não afeta a saída. Para produzir um novo parágrafo, temos que usar o comando \par .
Alguns editores do TeX interpretam uma linha em branco como \par . Então o seguinte código
line one here
continues here and so on
New paragraph here
produz a saída
line one here continues here and so on
New paragraph here
Como alguns editores podem agrupar linhas longas automaticamente, gosto de escrever meus códigos com menos RETURN possível. Isso é melhor quando queremos cuidar dos números de linha.
Veja a captura de tela:

Gostariaderemoverofinaldaslinhas,masmanteraslinhasembrancomesmoquecontenhamapenasespaçosembranco.Apósoprocesso,eugostariadomeucódigoassim:
Note que o novo código contém apenas 3 linhas.
Eu tentei usar tr , mas não obtive sucesso.
Editar: depois de testar o código sugerido por @ lcd047, notei que alguns problemas aparecem quando a linha n contém % ( % é usada para comentar no TeX e tudo depois na linha é ignorado).
Então, acho que devo adicionar a solicitação : se a linha n contiver % não cole n com n-1 nem cole n+1 com n .
Tente isto:
perl -lpe 'BEGIN{ $/= $\ = "\n\n" } s/^[^%]+?\K\n/ /gmo' <file_old.tex >file_new.tex
Para deixar as linhas sozinhas com comandos:
perl -lpe 'BEGIN{ $/= $\ = "\n\n" } s/^\s*[^\s\%][^%]*?\K\n/ /gmo' <file_old.tex >file_new.tex
Observe, no entanto, que algumas das pessoas que revisaram seus artigos irão odiá-lo com paixão por esse movimento.