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