A solução awk
do Drav é boa, mas isso significa executar um comando sort
por parágrafo. Para evitar isso, você poderia fazer:
< file awk -v n=0 '!NF{n++};{print n,$0}' | sort -k1n -k2 | cut -d' ' -f2-
Ou você pode fazer tudo em perl
:
perl -ne 'if (/\S/){push@l,$_}else{print sort@l if@l;@l=();print}
END{print sort @l if @l}' < file
Observe que, acima, os separadores são linhas em branco (para awk
one, linhas com apenas espaço ou caracteres de tabulação, para perl
one, qualquer caractere de espaçamento horizontal ou vertical) em vez de linhas vazias. Se você quiser linhas vazias, poderá substituir !NF
por !length
ou $0==""
e /\S/
por /./
.