Awk-Ejemplos
Im prim ir Página actualizada 31 de octubre, 2005 Sum ario: Enesta secuela de la introducción a aw k, Daniel Robbins continúa explorando aw k, un gran lenguaje de extraño nombre. Daniel nos enseñará como manejar registros compuestos por múltiples líneas, usar construcciones de bucle y crear y usar matrices en aw k. Al final de este artículo estarás versado en una amplia variedad de funcionalidades, y estarás preparado para escribir tus propios guiones en aw k.Daniel Robbins Autor Jesús Guerrero Traductor Donate to support our
Awk mediante ejemplos, Parte 2
Contenido: 1. Registros, bucles y matrices
1.
Registros, bucles y matrices
Registros compuestos de múltiples líneas
Awk es una herramienta excelente para leer y procesar datos estructurados, tales como el contenido del fichero de sistema /etc/passwd. /etc/passwd contiene la base dedatos de usuarios en UNIX, y es un fichero de texto con campos delimitados por el signo de dos puntos. Además contiene información importante como las cuentas de usuario existentes y los números de ID de los usuarios, entre otras cosas. En mi artículo anterior, mostré como awk puede procesar este fichero de forma rápida. Todo lo que se necesitaba era establecer la variables de separador de campos FSal carácter ":". Al establecer la variable FS de forma correcta, awk puede ser configurado para interpretar casi cualquier bloque de datos estructurado, siempre que haya un registro por línea. Sin embargo, FS por sí sola no nos solucionará el problema si necesitamos procesar registros que ocupen varias líneas. En estas situaciones, también
open in browser PRO version
Are you a developer? Try outthe HTML to PDF API
pdfcrowd.com
necesitaremos modificar la variable RS, que es el separador de registro. Esta variable le dice a awk cuando se acaba un registro y cuando comienza el siguiente. Como ejemplo, podemos considerar la tarea de procesar la lista de direcciones de los participantes en el programa federal de protección de testigos:
Listado de Código 1.1: Registros de ejemplo parala lista del programa federal de protección de testigos Jimmy the Weasel 100 Pleasant Drive San Francisco, CA 12345 Big Tony 200 Incognito Ave. Suburbia, WA 67890
Donate to support our development efforts.
Lo ideal sería que awk reconociera cada grupo de tres líneas como un registro, en lugar de reconocer cada línea como un registro individual. Nuestro código sería mucho más simple si awkreconociera la primera línea del registro como el primer campo ($1), la dirección como el segundo campo ($2), y la ciudad, estado y código postal como el tercer campo ($3). Y eso lo conseguimos con el código siguiente:
Listado de Código 1.2: Extrayendo un campo de la dirección BEGIN { FS="\n" RS="" }
Al establecer FS a "\n" le decimos a awk que cada campo aparecerá en su propia línea.Estableciendo RS a "" le decimos a awk que cada registro está separado por una línea en blanco. Una vez que awk sabe como la entrada está formateada, puede realizar todo el trabajo por sí solo, y el resto del guión es simple. Veamos como quedaría un guión completo para procesar esta lista de direcciones e imprimir cada registro completo en una sola línea, en campos separados por comas.
Listado de Código1.3: Guión completo BEGIN { FS="\n" RS="" } { print $1 ", " $2 ", " $3 } open in browser PRO version Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
{ print $1 ", " $2 ", " $3 }
Si el guión se salvó como address.awk, y la información sobre las direcciones está en un fichero llamado address.txt, puedes ejecutar este guión escribiendo awk -f address.awk address.txt. Este...
Regístrate para leer el documento completo.