Sempre que uma linha BEGIN
for encontrada, leia separadamente a próxima linha numérica do arquivo usando um identificador separado por meio de getline
. Imprima cada linha do arquivo com dois prefixos, o valor numérico que foi recuperado anteriormente e o número do registro do arquivo do registro atual (assim todas as linhas dentro do mesmo bloco BEGIN .. END
terminam com o mesmo valor no prefixo 1 correspondente ao número incorporado no bloco). Alimente isso com os utilitários externos sort
e cut
para manipular a classificação baseada em prefixo, descartando os prefixos.
awk '/BEGIN/{"awk \$0+0==\$0 "FILENAME | getline x}
{print x"~"FNR"~"$0 | "sort -k1,1n -k2,2n -t~ | cut -f3- -d~"}' file
BEGIN
hello4
2
world5
END
BEGIN
hello6
4
END
BEGIN
hello2
5
world1
END