AWK - Redirección de salida

Hasta ahora, mostramos datos en el flujo de salida estándar. También podemos redirigir datos a un archivo. Aparece una redirección después deprint o printfdeclaración. Las redirecciones en AWK se escriben como la redirección en los comandos de shell, excepto que están escritas dentro del programa AWK. Este capítulo explica la redirección con ejemplos adecuados.

Operador de redireccionamiento

La sintaxis del operador de redirección es:

Sintaxis

print DATA > output-file

Escribe los datos en el output-file. Si el archivo de salida no existe, crea uno. Cuando se utiliza este tipo de redireccionamiento, el archivo de salida se borra antes de que se escriba en él la primera salida. Las operaciones de escritura subsiguientes en el mismo archivo de salida no borran el archivo de salida, sino que lo agregan. Por ejemplo, el siguiente ejemplo escribeHello, World !!! al archivo.

Creemos un archivo con algunos datos de texto.

Ejemplo

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

Al ejecutar este código, obtiene el siguiente resultado:

Salida

Old data

Ahora, redirigamos algunos contenidos usando el operador de redirección de AWK.

Ejemplo

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

Al ejecutar este código, obtiene el siguiente resultado:

Salida

Hello, World !!!

Agregar operador

La sintaxis del operador append es la siguiente:

Sintaxis

print DATA >> output-file

Agrega los datos al output-file. Si el archivo de salida no existe, crea uno. Cuando se utiliza este tipo de redirección, se añaden nuevos contenidos al final del archivo. Por ejemplo, el siguiente ejemplo agregaHello, World !!! al archivo.

Creemos un archivo con algunos datos de texto.

Ejemplo

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

Al ejecutar este código, obtiene el siguiente resultado:

Salida

Old data

Ahora agreguemos algunos contenidos usando el operador de agregación de AWK.

Ejemplo

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

Al ejecutar este código, obtiene el siguiente resultado:

Salida

Old data
Hello, World !!!

Tubo

Es posible enviar la salida a otro programa a través de una tubería en lugar de utilizar un archivo. Esta redirección abre una canalización al comando y escribe los valores de los elementos a través de esta canalización en otro proceso para ejecutar el comando. El comando de argumento de redirección es en realidad una expresión AWK. Aquí está la sintaxis de pipe:

Sintaxis

print items | command

Usemos tr comando para convertir letras minúsculas a mayúsculas.

Ejemplo

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

Al ejecutar este código, obtiene el siguiente resultado:

Salida

HELLO, WORLD !!!

Comunicación bidireccional

AWK puede comunicarse con un proceso externo usando |&, que es una comunicación bidireccional. Por ejemplo, el siguiente ejemplo usatrcomando para convertir letras minúsculas a mayúsculas. Nuestracommand.awk el archivo contiene -

Ejemplo

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

Al ejecutar este código, obtiene el siguiente resultado:

Salida

HELLO, WORLD !!!

¿El guión parece críptico? Vamos a desmitificarlo.

  • La primera declaración, cmd = "tr [a-z] [A-Z]", es el comando al que establecemos la comunicación bidireccional desde AWK.

  • La siguiente declaración, es decir, el comando de impresión proporciona entrada al trmando. aquí&| indica comunicación bidireccional.

  • La tercera declaración, es decir, close(cmd, "to"), cierra el to proceso después de competir su ejecución.

  • La siguiente declaración cmd |& getline out almacena el output en la variable out con la ayuda de la función getline.

  • La siguiente declaración de impresión imprime la salida y finalmente la close La función cierra el comando.