awk '$0!=""{print NR, $0}' file
O $0 != ""
significa $0
not equal
para vazio. Para essas linhas, imprima o número e a linha da linha.
Isso produzirá essa saída:
1 abcdef
2 ghi
4 klm
5 nopqr st
com os números de linha antigos. Se você precisar da saída com os novos números de linha:
awk '$0!=""{a++; print a, $0}' file
1 abcdef
2 ghi
3 klm
4 nopqr st
Para explicar como seu script funcionou:
A linha com read line
lerá a primeira linha (você não a imprime).
Em seguida, você conecta o arquivo a awk
e processa todas as outras linhas.
Awk não (por padrão) evita linhas vazias, então a linha vazia também é impressa.
Existem muitas maneiras de resolver isso, a que está acima parece tão simples quanto possível.