Cerrando los Ficheros de Salida y Pipes AWK

Cuando se abre un fichero o pipe, el nombre de fichero o comando asociado con él es recordado por awk y las siguientes escrituras al mismo fichero o comando son añadidas a las escrituras previas. El fichero o pipe permanece abierto hasta que finaliza el programa awk. Esto es normalmente conveniente.
Algunas veces existe una razón para cerrar un fichero de salida o un pipe antes de que finalice el programa awk. Para hacer esto, utilice la función close, tal y como sigue:

close(nombre-fichero) o close(comando)

El argumento nombre-fichero o comando puede ser cualquier expresión. Su valor debe concordar exactamente con la cadena usada para abrir el fichero o pipe cuando se empezó a usar – por ejemplo, si abres un pipe con esto:

print $1 | "sort -r > names.sorted"

entonces debes cerrarlo con esto:

close("sort -r > names.sorted")

Aquí están algunas razones por las cuales podrías necesitar cerrar un fichero de salida:


  • Para escribir un fichero y leer el mismo posteriormente en el mismo programa awk. Cierra el fichero cuando hayas acabado de escribir en él; entonces ya puedes empezarlo a leer con getline.
  • Para escribir numerosos ficheros, sucesivamente, en el mismo programa awk. Si no cierras los ficheros, eventualmente excederás el límite del sistema en el número de ficheros abiertos por un proceso. Así que cierra  cada uno cuando hayas acabado de escribirlo.
  • Para hacer que un comando acabe. Cuando redireccionas la salida a través de un pipe, el comando que lee del pipe normalmente sigue intentando leer entrada mientras el pipe esté abierto. A menudo esto significa que el comando no puede realizar su trabajo hasta que el pipe es cerrado. Por ejemplo, si redireccionas la salida al programa mail, el mensaje no se enviará realmente hasta que el pipe se cierre.
  • Para ejecutar el mismo programa una segunda vez, con los mismos argumentos. Esto no es la misma cosa que darle más entrada a la primera ejecución.

Por ejemplo, supón que haces un pipe de la salida al programa mail. Si sacas varias líneas redirigidas a este pipe sin cerrarlo, crear un mensaje de varias líneas. En constraste, si cierras el pipe después de cada línea de salida, entonces cada línea creara un correo distinto.



Publicar un comentario

0 Comentarios