Eu escrevia:
awk 'NR > 1 && $0 != last {print ""}
{print; last = $0}' < your-file
Observe que, contanto que as linhas consistam em números, essa $0 != last será uma comparação numérica , para a qual 1.0 é igual a 1 ou 1e0 ou 1.00 (embora não necessariamente 0x1, e também cuidado com o efeito potencial da localidade em relação ao tratamento do separador decimal (1,0 vs 1,0)). Se você quiser garantir uma comparação lexical, altere para $0 "" != last .
Dependendo da implementação de awk , isso aplicará um memcmp() (comparação de byte a byte), strcmp() (mesmo, mas não pode manipular bytes NUL), strcoll() (se os dois strings classificam a mesma) ou wcsncmp() (caractere-para-caractere ao contrário de byte para byte) comparação (todos os quais devem ser equivalentes se sua entrada consistir apenas de dígitos decimais e caracteres de período).
Se você quiser forçar a comparação byte a byte, corrija a localidade para C:
LC_ALL=C awk 'NR > 1 && $0 "" != last {print ""}
{print; last = $0}' < your-file
(mais uma vez, algumas implementações de awk irão engasgar com o caractere NUL).