AWK - Redirecionamento de Saída

Até agora, exibimos dados no fluxo de saída padrão. Também podemos redirecionar dados para um arquivo. Um redirecionamento aparece após oprint ou printfdeclaração. Redirecionamentos em AWK são escritos da mesma forma que redirecionamentos em comandos shell, exceto que eles são escritos dentro do programa AWK. Este capítulo explica o redirecionamento com exemplos adequados.

Operador de Redirecionamento

A sintaxe do operador de redirecionamento é -

Sintaxe

print DATA > output-file

Ele grava os dados no output-file. Se o arquivo de saída não existir, ele criará um. Quando este tipo de redirecionamento é usado, o arquivo de saída é apagado antes que a primeira saída seja gravada nele. As operações de gravação subsequentes no mesmo arquivo de saída não apagam o arquivo de saída, mas o anexam. Por exemplo, o exemplo a seguir escreveHello, World !!! para o arquivo.

Vamos criar um arquivo com alguns dados de texto.

Exemplo

[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

Old data

Agora, vamos redirecionar alguns conteúdos para ele usando o operador de redirecionamento de AWK.

Exemplo

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

Hello, World !!!

Operador Anexo

A sintaxe do operador append é a seguinte -

Sintaxe

print DATA >> output-file

Ele anexa os dados ao output-file. Se o arquivo de saída não existir, ele cria um. Quando esse tipo de redirecionamento é usado, novos conteúdos são acrescentados ao final do arquivo. Por exemplo, o exemplo a seguir anexaHello, World !!! para o arquivo.

Vamos criar um arquivo com alguns dados de texto.

Exemplo

[jerry]$ echo "Old data" > /tmp/message.txt 
[jerry]$ cat /tmp/message.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

Old data

Agora vamos acrescentar alguns conteúdos a ele usando o operador append de AWK.

Exemplo

[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

Old data
Hello, World !!!

Tubo

É possível enviar a saída para outro programa por meio de um pipe em vez de usar um arquivo. Esse redirecionamento abre um canal para o comando e grava os valores dos itens por meio desse canal para outro processo para executar o comando. O comando de argumento de redirecionamento é, na verdade, uma expressão AWK. Aqui está a sintaxe de pipe -

Sintaxe

print items | command

Vamos usar tr comando para converter letras minúsculas em maiúsculas.

Exemplo

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

Ao executar este código, você obtém o seguinte resultado -

Resultado

HELLO, WORLD !!!

Comunicação bidirecional

AWK pode se comunicar com um processo externo usando |&, que é uma comunicação bidirecional. Por exemplo, o exemplo a seguir usatrcomando para converter letras minúsculas em maiúsculas. Nossocommand.awk arquivo contém -

Exemplo

BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   close(cmd, "to")
   
   cmd |& getline out
   print out;
   close(cmd);
}

Ao executar este código, você obtém o seguinte resultado -

Resultado

HELLO, WORLD !!!

O script parece enigmático? Deixe-nos desmistificar.

  • A primeira declaração, cmd = "tr [a-z] [A-Z]", é o comando com o qual estabelecemos a comunicação bidirecional do AWK.

  • A próxima declaração, ou seja, o comando de impressão fornece entrada para o trcomando. Aqui&| indica comunicação bidirecional.

  • A terceira afirmação, ou seja, close(cmd, "to"), fecha o to processo após competir sua execução.

  • A próxima declaração cmd |& getline out armazena o output em out variável com a ajuda da função getline.

  • A próxima instrução de impressão imprime a saída e, finalmente, o close função fecha o comando.