Ejemplos de Uso de printf AWK

Aquí tienes como usar printf para presentar una tabla alineada:

awk '{ printf "%-10s %s\n", $1, $2 }' Lista-BBS

imprime los nombres de los bulletin boards ($1) del fichero ‘Lista-BBS’ como una cadena de 10 caracteres justificados a la izquierda. También imprime los números de teléfono ($2) a continación en la línea. Esto produce una tabla alineada de dos columnas de nombres y números de teléfonos:

aardvark 555-5553
alpo-net 555-3412
barfly 555-7685
bites 555-1675
camelot 555-0542
core 555-2912
fooey 555-1234
foot 555-6699
macfoo 555-6480
sdace 555-3430
sabafoo 555-2127

¿Te diste cuenta de que no especificamos que se imprimiesen los números de teléfono como números? Tienen que ser impresos como cadenas debido a que están separados por medio con el guión. Este guión podría ser interpretado como un signo menos si hubiesemos intentado imprimir los números de teléfono como números. Esto nos hubieses producido unos resultados confusos y erróneos.

No hemos especifado un ancho para los números de teléfono porque son lo último que se imprimirá en cada línea. No necesitamos poner espacios después de ellos.
Podríamos haber hecho nuestra tabla más elegante incluso añadiéndole cabeceras encima de cada una de las columnas. Para hacer esto, usa el patrón BEGIN para hacer que se imprima la cabecera solamente una vez, al principio del programa awk:

awk 'BEGIN { print "Nombre Número"
print "------ ------" }
{ printf "%-10s %s\n", $1, $2 }' Lista-BBS


¿Te diste cuenta de que mezclamos las sentencias print y printf en el ejemplo anterior? Podríamos haber utilizado solamente sentencias printf para obtener el mismo resultado:

awk 'BEGIN { printf "%-10s %s\n", "Name", "Number"
printf "%-10s %s\n", "----", "------" }
{ printf "%-10s %s\n", $1, $2 }' Lista-BBS


Poniendo cada cabecera de columna con la misma especificación de formato usada para los elementos, nos hemos asegurado que las cabeceras tendrán la misma alineación que las columnas. El hecho de que la misma especificación de formato se use tres veces, puede ser resumido almacenando dicha especificación de formato en una variable, tal y como sigue:

awk 'BEGIN { format = "%-10s %s\n"
printf format, "Name", "Number"
printf format, "----", "------" }
{ printf format, $1, $2 }' Lista-BBS



Publicar un comentario

0 Comentarios