BEGIN
padrões são executados antes qualquer entrada é lida, portanto, nenhuma das variáveis que se referem a entrada, como NR
, campos como $0
..., serão definidas em qualquer um dos blocos BEGIN
. Sua segunda abordagem está correta e muito melhor.¹ A partir da especificação awik POSIX ( ênfase mine):
The awk utility shall recognize two special patterns, BEGIN and END. Each BEGIN pattern shall be matched once and its associated action executed before the first record of input is read ...
¹ Apenas uma observação, também é bom porque não faz suposições sobre o mínimo ou máximo sendo limitado por um valor particular como 0, algo que muitos one-liners que se encontra na internet assumem.