El comando printf de bash


El comando se deriva de la función printf del lenguaje de programación C y tiene un proposito similar pero con algunas diferencias. Su sintaxis es:

printf FORMATO ARGUMENTOS ...


La cadena formato puede contener:

  • Caracteres ordinarios: Estos se imprimen en la salida estandar sin cambio alguno.
  • Formatos específicos: Estos caracteres son filtros que son reemplazados por los argumentos.
  • Literales de caracteres (Escape Sequences): Estos caracteres se convierten en caracteres que ellos mismos representan.

Formatos específicos

Los formatos son letras que contienen el signo % al inicio y son reemplazados por los argumentos.

  • %d, %i: Imprimen un valor decimal
  • %u: Imprime un valor decimal sin signo
  • %f, %F: Imprimen un valor del tipo punto flotante
  • %e, %E: Imprimen un valor del tipo doble con notación científica
  • %g, %G: Imprimen un valor del tipo doble
  • %x, %X: Imprimen un valor hexadecimal
  • %o: Imprime un valor octal sin signo
  • %s: Imprime una cadena
  • %c: Imprime un caractér
  • %%: Imprime el signo %

Literales de caracteres

Son caractéres únicos que normalmente están compuestos por un carácter entre comillas.

  • \': Comilla simple
  • \": Comilla doble
  • \\: Barra invertida
  • \0: Null
  • \a: Alerta
  • \b: Retroceso
  • \f: Avance de página
  • \n: Nueva línea
  • \r: Retorno
  • \t: Tabulación horizontal
  • \v: Tabulación vertical
  • \nnn: Un caractér específico por uno a tres números octales
  • \xHH: Un caractér especifico por uno o dos números hexadecimales

Ejemplos

Transformar los colores RGB a Hexadecimal

$ printf "Color: #%02x%02x%02x;\n" 255 0 0
Color: #ff0000;
$ printf "Color: #%02x%02x%02x;\n" 0 255 0
Color: #00ff00;
$ printf "Color: #%02x%02x%02x;\n" 0 0 255
Color: #0000ff;

Reporte

Ahora vamos a crear un Reporte de Ventas. Para esto vamos a crear un archivo llamado Reporte.sh donde vamos a escribir el siguiente código:

#!/bin/bash

# Construir la división
divider========================
divider=$divider$divider

# Formatos para printf
header="\n %-10s %10s %10s %10s\n"
format=" %-10s %9.2f %10d %10.2f\n"

# ncho del reporte
totalwidth=44

# Imprime las categorias
printf "$header" Artículo Precio Cantidad Total

# Imprime la división
printf "%$totalwidth.${totalwidth}s\n" "$divider"

# Imprime los artículos
printf "$format" \
	Mesa 100 4 400 \
	Silla 209.99 1 209.99 \
	Comedor 315 2 630

Tal vez sea necesario cambiar los permisos del script.

$ chmod 777 Reporte.sh
$ ./Reporte.sh

 Artículo      Precio   Cantidad      Total
============================================
 Mesa          100.00          4     400.00
 Silla         209.99          1     209.99
 Comedor       315.00          2     630.00

Posted in

Leave a Reply