awk
faz um loop em cada registro de entrada. Se nenhum arquivo de entrada for especificado, ele utilizará a entrada padrão. Se você deseja executar uma expressão sem usar nenhuma entrada, use um bloco BEGIN
e não mantenha nada fora dela:
$ awk 'BEGIN {print "foo"}'
foo
Então, no seu caso:
awk 'BEGIN {printf "%20s\n", "hi"}'
Normalmente, o bloco BEGIN
é executado antes que qualquer entrada seja lida. Portanto, ele é executado independentemente de haver alguma entrada e, como não há outras expressões para executar, o awk
simplesmente sai.
Você também pode usar exit
para fazer o awk sair do loop:
awk '{printf "%20s\n", "hi"; exit}'