Uso del orden Bash printf para imprimir salidas formateadas

Qué tal aquí Fran. Os traigo un nuevo post sobre el sistema operativo mas molón. Un placer linuxeros.

La forma más sencilla de imprimir en la línea de comandos de Linux es mediante el comando echo.

echo "Value of var is $var"

Sin embargo, el comando echo no será adecuada cuando haya de imprimir la salida formateada.

Aquí es donde el orden printf le ayuda. El orden bash printf funciona como el orden printf a C /Lenguaje de programación C ++.

printf "My brother %s is %d years old.n" Prakash 21

Se puede adivinar la salida?

Ejemplo de orden Bash printf

El primer argumento %s espera una cadena, %d espera un número entero decimal, al igual que C / C ++. No se preocupe si no está familiarizado con C / C ++.

No es necesario que lo aprenda sólo para utilizar el comando printf a sus scripts de Bash. Dejadme mostraros algunos ejemplos del orden Bash printf.

Mediante la orden Bash printf

Empezamos por la sintaxis primero.

printf format [arguments]

aquí, format es una cadena que determina cómo se mostrarán los valores posteriores.

En el ejemplo printf "My brother %s is %d years old.n" Prakash 21, El formato «Mi hermano% s tiene% d años. N» tiene el formato y lo siguen los argumentos Prakash y 21. Los argumentos se utilizan para sustituir los especificadores de formato (% s,% d, etc.) que explicaré más adelante en este artículo.

En su forma más sencilla, printf se puede utilizar como orden eco para mostrar una cadena.

printf "Hello Worldn"

Fíjese en el nuevo carácter de línea n al final? el diferencia entre el orden eco y printf es que echo añade automáticamente un nuevo carácter de línea al final, pero para printf, el debe añadir explícitamente.

eco vs printf

Preste especial atención al tipo y al número de argumentos

Tenga en cuenta que la cadena de formato intenta aplicarse a todos los argumentos. Es por ello que debe prestar especial atención.

abhishek@handbook:~$ printf "Hello, %s! n" Kike Gracia
Hello, Abhishek! 
Hello, Prakash!
Ejemplo de orden bash printf

Del mismo modo, debería fijar en el tipo de especificador de formato que espera en la cadena de formato.

ejemplos de órdenes bash printf

Como puede ver en el ejemplo anterior, si no encuentra los argumentos previstos, muestra los valores por defecto que son nulos para las cadenas y 0 para los enteros.

printf "Hi %s, your room number is %d. n" Kike Gracia 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0. 
Hi 131, your room number is 0.

Aquí, se necesita Kike Gracia como primer conjunto de argumentos y 131 como segundo conjunto de argumentos.

Cuando encuentra una cadena (Prakash) en lugar de un entero, se queja, pero sigue mostrando la salida con el segundo argumento a su valor por defecto 0.

Del mismo modo, ve 131 como una cadena al segundo conjunto de argumentos y, como el segundo argumento está ausente, por defecto es 0.

Formato de caracteres de especificación

Hay varios especificadores de formato disponibles para mostrar su salida en el formato deseado. Estos son algunos de los más habituales:

personaje uso
% s cuerda
% c personaje único
% d números enteros
% o Números enteros octales
% x Números enteros hexadecimales
% f punto flotante
% b Cadena con carácter de escape de barra invertida
%% Signo de porcentaje

Ahora que ya conoce el especificador de formato, veamos algunos ejemplos más que los muestran en acción.

Ejemplos de órdenes de Bash printf

No creo que necesite una explicación detallada para la mayoría de estos ejemplos, ya que se explican por sí mismos.

abhishek@handbook:~$ printf "The octal value of %d is %on" 30 30
The octal value of 30 is 36

Veamos el uso del archivo %b especificador para interpretar correctamente el carácter escapado de barra invertida.

abhishek@handbook:~$ printf "String with backslash: %sn" "HellonWorld!"
String with backslash: HellonWorld!

Ya ven %s, No hace ninguna diferencia. pero con %b el nuevo carácter de escape de línea se interpretará correctamente:

abhishek@handbook:~$ printf "String with backslash: %bn" "HellonWorld!"
String with backslash: Hello
World!

Al utilizar el archivo %c, Sólo lee caracteres a la vez.

abhishek@handbook:~$ printf "Character: %cn" a
Character: a
abhishek@handbook:~$ printf "Character: %cn" a b c
Character: a
Character: b
Character: c
abhishek@handbook:~$ printf "Character: %cn" abc
Character: a

Utilizando modificadores para mostrar la salida printf en un estilo específico

Hay modificadores para cambiar el aspecto de la salida según su gusto.

# Modificador para los números octal y hexadecimal

Antes veis el uso de %o para convertir decimal a octal. Sin embargo, no estaba muy claro que se tratara de un número octal. Puede utilizar el archivo # modificador para mostrar los números octal y hexadecimal en el formato adecuado.

abhishek@handbook:~$ printf "%d is %#o in octal and %#x in hexadecimaln" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal

Modificador de espacio para enteros enteros positivos

Puede utilizar un espacio entre % y d dentro %d para mostrar un entero positivo con un espacio principal. Esto ayuda cuando tiene una columna de números positivos y negativos. Mirad que se ve más «bonita»:

abhishek@handbook:~$ printf "%d n%d n%d n" 10 -10 10
10 
-10 
10 
abhishek@handbook:~$ printf "% d n%d n% d n" 10 -10 10
 10 
-10 
 10 

Modificador de ancho

El modificador de ancho es un número entero que especifica la anchura mínima del campo del argumento.

Por defecto, está alineado a la derecha:

abhishek@handbook:~$ printf "%10s| %5dn" Age 23
       Age|    23

Puede hacerlo alineado a la izquierda añadiendo - márcalo:

abhishek@handbook:~$ printf "%-10s| %-5dn" Age 23
Age       | 23

Modificador de precisión

Puede utilizar el punto modificador de precisión (.) Para especificar un número mínimo de dígitos con los que se mostrará %d, %u, %o, %x. Agregar cero relleno a la izquierda del valor.

abhishek@handbook:~$ printf "Roll Number: %.5dn" 23
Roll Number: 00023

Si utiliza el modificador de precisión con una cadena, especifica la longitud máxima de la cadena. Si la cadena es más larga, se trunca en la pantalla.

abhishek@handbook:~$ printf "Name: %.4sn" Abhishek
Name: Abhi

Puede combinar el modificador de anchura y precisión:

abhishek@handbook:~$ printf "Name: %.4sn" Abhishek
Name: Abhi
abhishek@handbook:~$ printf "Name: %10.4sn" Abhishek
Name:       Abhi

Ejemplo de bonificación: muestra la salida en formato tabular con printf

Ponemos lo que has aprendido sobre el orden printf a un buen uso con un ejemplo un poco más complicado. Esto mostrará el verdadero potencial del orden printf en scripts bash.

Utilizamos el orden printf para imprimir la tabla con bash:

nombre identificación edad grados
Sherlock Holmes 0000122 23 A
James Bond 0000007 27 F
Hércules Poirot 0006811 59 G
Jane Marple 1234567 71 C

Aquí tiene el escritorio de shell que he escrito para esta tarea. Su guión puede variar:

#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %cn"
TableWidth=37

printf "%-15s| %-7s| %.3s| %sn" Name ID Age Grades
printf "%.$TableWidthsn" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C

Ahora, si ejecuto este script bash shell, esto es lo que imprime:

No es maravilloso utilizar el comando bash printf para imprimir una salida con un formato maravilloso para sus scripts?

Espero que os haya gustado este detallado tutorial sobre el orden printf Linux. Si tiene preguntas o sugerencias, avisadme. Y no se olvide de formar parte del Linux Handbook para obtener más información sobre estos aprendizajes sobre Linux.

El Blog lo hacemos para colaborar y servir de ayuda a la comunidad Linux. Esperamos que os guste.

Leave a Reply