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.