Redireccionando la Salida a Ficheros y Pipes AWK

Aquí aparecen las tres formas de la redirección de la salida. Ellas se muestran todas para la sentencia print, pero funcionan de forma idéntica para printf.

print items > fichero-salida

Este tipo de redirección imprime los items en el fichero de salida fichero-salida. El nombre del fichero fichero- salida puede ser cualquier expresión. Su valor se convierte a cadena y después es usada como nombre de fichero.

Cuando se usa este tipo de redirección, el fichero-salida es eliminado antes de que se escriba en él la primera salida. Las escrituras siguientes no borrarán el fichero-salida, pero sí añadirán a él. Si fichero-salida no existe entonces será creado.

Por ejemplo, aquí aparece como un programa awk puede escribir una lista de nombres BBS a un fichero ‘lista- nombres’ y una lista de números de teléfonos a un fichero  ‘lista-teléfonos’. Cada fichero de salida contiene un nombre o número por línea.

awk '{ print $2 > "lista-teléfonos"
print $1 > "lista-nombres" }' Lista-BBS

print items >> fichero-salida

Este tipo de redirección imprime los items en el fichero de salida fichero-salida. La diferencia entres este y el signo ‘>’ único es que los viejos contenidos (si los tuviese) del fichero fichero-salida no son eliminados. En su lugar, la salida que genera awk es añadida a dicho fichero.

print items | comando

También es posible enviar la salida a través de un pipe en lugar de a un fichero. Este tipo de  redireccionamiento abre un pipe a comando y escribe los valores de items a través de este pipe, a otro proceso creado para ejecutar comando.

El argumento de redirección comando es realmente una expresión awk. Su valor se convierte a cadena, cuyo contenido nos proporcina el comando de shell que debe ser ejecutado.

Por ejemplo, este produce dos ficheros, una lista sin ordenar de nombres BBS y una lista ordenada en orden alfabético inverso:

awk '{ print $1 > "names.unsorted"
print $1 | "sort -r > names.sorted" }' Lista-BBS

Aquí la lista desordenada se escribe con una redirección normal mientras que la lista ordenada es escrita mediante un pipe al comando sort de Unix.

Aquí tienes un ejemplo que usa el redireccionamiento para enviar un mensaje a una lista de correos ‘bug- system’. Esto podría ser útil cuando se encuentran problemas en un script awk que se ejecuta periódicamente para  el mantenimiento del sistema.

print "Awk script failed:", $0 | "mail bug-system"
print "at record number", FNR, "of", FILENAME | "mail bug-system"
close("mail bug-system")

Llamamos a la función close aquí porque es una buena idea cerrar la tubería o pipe tan pronto como toda la salida ha pasado a través de ella.

El redireccionamiento de la salida us ando `>', `>>', o `|' le pide al sistema que abra un fichero o pipe solo si el fichero o comando particular que has especificado no ha sido ya escrito por tu programa.


Publicar un comentario

0 Comentarios