Cómo usar printf en Bash

Shutterstock / Gilangtristiano

El formato de texto es un tema interesante, especialmente cuando se trata de Bash. Aunque existen muchas herramientas para formatear texto, printf es único y universal. ¡Aprenda todo sobre printf en Bash para formatear su texto de la manera correcta!

→ Índice de contenidos

Utilizando printf en Bash

C ++ y otros desarrolladores ya estarán familiarizados con printf como una excelente manera de formatear la salida de texto durante la programación. Tener la misma herramienta disponible en Bash es una gran ventaja. printf le permite controlar y producir formatos de salida complejos, de la forma que desee. La página de manual de printf define printf como una herramienta de 'formato e impresión de datos', que es exactamente lo que es y hace.

Por ejemplo, le gustaría imprimir un número basado en decimal con una longitud exacta de 3 bytes (o caracteres / números) para la parte entera (la parte antes del punto decimal o coma, dependiendo de dónde viva en el mundo y qué local es) y 2 bytes (o caracteres / números) para la parte decimal del número? No hay problema, printf puede hacer esto y más. También podría enviar el texto a una columna específica en la pantalla, etc.

Si bien la sintaxis de printf puede parecer confusa o compleja para un nuevo desarrollador, en realidad es bastante simple. Solo hay un conjunto limitado de caracteres de formato de uso común que se pueden usar dentro de una definición de salida de printf. Echemos un vistazo a estos primero.

Sintaxis: printf

Estos son los mas usados sintaxis printf modismos de formato de números:

%d or %i  a signed decimal integer
%u        an unsigned decimal integer
%f        a decimal floating point number
%e        a scientific notation number
%g        will let printf use %e or %f, whichever is shorter
%c        a single character
%s        a string of characters
%%        a literal '%'

A continuación, es bueno saber cómo especificar opciones específicas en relación con estos modismos de formato. El formato para especificar opciones para estos es el siguiente:

%[flag(s)][width][.precision][length]number_formatting_idiom

Ejemplos: printf

Entonces, por ejemplo, para tener un flotante con un ancho de 3 y una precisión de 2, tendría que especificar:

%3.2f

Echemos un vistazo a un ejemplo:

printf "%3.2fn" "100.304" 

Impresión de un flotador bien formateado con printf

Simple y fácil. Tenga en cuenta que podríamos haber utilizado una variable en lugar de "100.304":

VAR1=100.304
printf "%3.2fn" ${VAR1}

Imprimir un flotante con formato printf usando una variable Bash

También observe cómo agregamos una nueva línea usando un archivo n nueva secuencia de línea. Para obtener una lista completa de las secuencias interpretadas disponibles, consulte man printf. Los mas comunes son n para la nueva línea, t por tarjeta y \ para una barra invertida.

En el formato de opciones anterior también vimos cómo podemos especificar banderas. Hay disponible un número limitado de banderas comunes:

-   Left-justify text (right-justify is the default)
+   Forces the use of a sign, even if positive
' ' A space is inserted if no sign will be used
0   Left-pad the number with zeroes instead of spaces when padding is specified

Entonces, por ejemplo, podemos tener:

VAR1=-100.304
VAR2=100.304
printf "% 3.2ftt%+3.2fn" ${VAR1} ${VAR2}

Impresión de números negativos con printf y formateo

Aquí hemos usado dos variables y hemos separado la salida de dos pestañas usando dos t secuencias de tabulaciones. También ponemos un espacio (como una bandera) en el medio % y la definición del ancho. Esto llevó al número negativo en VAR1 a imprimir con un signo negativo. Si el número hubiera sido positivo, no se habría impreso ningún signo y en su lugar se habría impreso un espacio en la misma posición.

Finalmente usamos el archivo + bandera y, de hecho, nuestro número se emite con un comienzo + signo independientemente de si el número ya es positivo y por lo tanto (normalmente) no se imprimirá ningún signo.

Entonces, ¿cómo podemos asegurarnos de tener ceros o espacios a la izquierda, mientras que tenemos una longitud específica? Primero, debemos asegurarnos de que el ancho de nuestra definición sea más largo que el contenido de la variable, y en segundo lugar podemos usar el 0 bandera para mostrar ceros a la izquierda:

VAR1=-100.304
VAR2=100.304
printf "% 13.2fn%013.2fn%13.2f" ${VAR1} ${VAR2} ${VAR1}

Formatear la salida para printf y definir ceros a la izquierda

En este ejemplo, imprimimos 3 líneas, separadas dos veces por el n nueva secuencia de línea. Inmediatamente notamos que si no hay una nueva línea al final de la salida, nuestro indicador Bash regresa específicamente al final de nuestra tercera línea de salida.

Puede que este no sea un formato bonito o práctico en modo interactivo en la terminal, sino desde dentro de un script (piense, por ejemplo, en una secuencia como 1...2...3... que construye paso a paso en la pantalla a medida que avanza en el código) esto puede ser muy útil.

En la segunda línea de salida, usamos el 0 para indicar que nos gustaría usar ceros a la izquierda para VAR2. De hecho, la salida produce ceros a la izquierda, hasta la longitud definida.

En la primera línea de salida, hemos insertado un espacio mientras que en la tercera línea de salida (ambos imprimiendo el archivo VAR1 variable) no lo hicimos. La salida es la misma, que es la única peculiaridad que encontré mientras trabajaba printf; uno esperaría que hubiera un carácter adicional dado el definición de bandera de espacio printf. Esto sigue siendo el mismo incluso si usamos ceros a la izquierda. Sigue siendo el mismo incluso si no se especifica una longitud.

Por lo tanto, la usabilidad de la bandera espacial puede, en algunos casos (números negativos) ser limitada. Este no es el caso de los números positivos:

VAR1=100.304
printf "% fn%0fn" ${VAR1} ${VAR1}

Un espacio inicial en números positivos basado en la bandera de espacio especial

En este caso (números positivos), el banner espacial funciona como se esperaba y en el caso del primero se inserta un espacio adicional VAR1 producción.

Conclusión

El uso de printf desde los scripts Bash o desde la línea de comando puede producir una salida clara y bien definida. Si escala las variables correctamente (y tal vez verifique el rango con certeza), use printf le proporcionará un método flexible para formatear la salida (y el diseño de pantalla general para aplicaciones más grandes) como desee.

En este artículo, veremos los modismos de formato de números de uso común, cómo definir el ancho de la parte entera y decimal de los números, y revisaremos las banderas más comúnmente utilizadas en printf. ¡Diviértase imprimiendo datos bien formateados con printf!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir Change privacy settings