Usando o Awk no modo de parágrafo :
$ awk -vRS= -vOFS= '{$1=$1} 1' file.txt
john,5901,open
lina,2401,open
jody,5401,open
Desativar o separador de registro com RS=
faz com que o awk trate tudo entre as linhas vazias como um único registro e adiciona a nova linha à lista padrão de delimitadores de campo de entrada de espaço em branco. Como sua entrada não contém outro espaço em branco, isso significa que cada linha de um bloco se torna um campo. Em seguida, forçamos o registro a ser reavaliado, reatribuindo um valor de campo a si mesmo $1=$1
e, finalmente, imprimindo o registro com um separador de campo de saída vazio OFS=
no lugar do espaço único padrão.