awk sintaxe printf simples

1

Estou praticando funções printf com o comando awk.

echo "unix" | awk '{printf "%5s\n", "hi"}'
awk '{printf "%20s\n", "hi"}'

O primeiro comando com echo imprime "oi". No entanto, o segundo comando está causando um problema. Sua saída continua continuando. Como corrijo esse problema para que ele faça exatamente o que o primeiro comando faz.

    
por Mint.K 13.02.2017 / 05:18

1 resposta

3

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}'
    
por muru 13.02.2017 / 05:24