AWK - Impresión bonita
Hasta ahora hemos utilizado AWK print y printffunciones para mostrar datos en la salida estándar. Pero printf es mucho más poderoso que lo que hemos visto antes. Esta función se toma prestada del lenguaje C y es muy útil al producir una salida formateada. A continuación se muestra la sintaxis de la declaración printf:
Sintaxis
printf fmt, expr-list
En la sintaxis anterior fmt es una cadena de especificaciones de formato y constantes. expr-list es una lista de argumentos correspondientes a especificadores de formato.
Secuencias de escape
Similar a cualquier cadena, el formato puede contener secuencias de escape incrustadas. A continuación se analizan las secuencias de escape admitidas por AWK:
Nueva línea
El siguiente ejemplo imprime Hello y World en líneas separadas usando el carácter de nueva línea -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Hello
World
Ficha horizontal
El siguiente ejemplo utiliza una pestaña horizontal para mostrar un campo diferente:
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
Al ejecutar el código anterior, obtiene el siguiente resultado:
Output
Sr No Name Sub Marks
Ficha vertical
El siguiente ejemplo usa tabulación vertical después de cada archivo:
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Sr No
Name
Sub
Marks
Retroceso
El siguiente ejemplo imprime un retroceso después de cada campo excepto el último. Borra el último número de los primeros tres campos. Por ejemplo,Field 1 se muestra como Field, porque el último carácter se borra con retroceso. Sin embargo, el último campoField 4 se muestra como está, ya que no teníamos un \b después Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Field Field Field Field 4
Retorno de carro
En el siguiente ejemplo, después de imprimir cada campo, hacemos un Carriage Return e imprima el siguiente valor encima del valor impreso actual. Significa que, en la salida final, solo puede verField 4, ya que fue lo último que se imprimió encima de todos los campos anteriores.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Field 4
Alimentación de formulario
El siguiente ejemplo utiliza el avance de página después de imprimir cada campo.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Sr No
Name
Sub
Marks
Especificador de formato
Como en el lenguaje C, AWK también tiene especificadores de formato. La versión AWK de la declaración printf acepta los siguientes formatos de especificación de conversión:
%C
Imprime un solo carácter. Si el argumento utilizado para%ces numérico, se trata como un carácter y se imprime. De lo contrario, se supone que el argumento es una cadena y se imprime el único primer carácter de esa cadena.
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
Al ejecutar este código, obtiene el siguiente resultado:
ASCII value 65 = character A
% d y% i
Imprime solo la parte entera de un número decimal.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Percentags = 80
% e y% E
Imprime un número de coma flotante de la forma [-] d.dddddde [+ -] dd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Percentags = 8.066000e+01
los %E usos del formato E en lugar de e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Percentags = 8.066000E+01
%F
Imprime un número de coma flotante de la forma [-] ddd.dddddd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Percentags = 80.660000
% gy% G
Utiliza conversión% e o% f, lo que sea más corto, con los ceros no significativos suprimidos.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
Al ejecutar este código, obtiene el siguiente resultado:
Percentags = 80.66
los %G usos del formato %E en lugar de% e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Percentags = 80.66
% o
Imprime un número octal sin signo.
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Octal representation of decimal number 10 = 12
% u
Imprime un número decimal sin signo.
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Unsigned 10 = 10
% s
Imprime una cadena de caracteres.
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Name = Sherlock Holmes
% x y% X
Imprime un número hexadecimal sin signo. los%X El formato utiliza letras mayúsculas en lugar de minúsculas.
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Hexadecimal representation of decimal number 15 = f
Ahora use% X y observe el resultado:
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Hexadecimal representation of decimal number 15 = F
%%
Imprime una sola % carácter y no se convierte ningún argumento.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Percentags = 80%
Parámetros opcionales con%
Con % podemos usar los siguientes parámetros opcionales:
Anchura
El campo se rellena al width. De forma predeterminada, el campo se rellena con espacios, pero cuando se usa la marca 0, se rellena con ceros.
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Num1 = 10
Num2 = 20
Ceros a la izquierda
Un cero a la izquierda actúa como una bandera, lo que indica que la salida debe rellenarse con ceros en lugar de espacios. Tenga en cuenta que esta bandera solo tiene efecto cuando el campo es más ancho que el valor a imprimir. El siguiente ejemplo describe esto:
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Num1 = -0010
Num2 = 00020
Justificación a la izquierda
La expresión debe estar justificada a la izquierda dentro de su campo. Cuando la cadena de entrada es menor que el número de caracteres especificado y desea que se justifique a la izquierda, es decir, agregando espacios a la derecha, use un símbolo menos (-) inmediatamente después del% y antes del número.
En el siguiente ejemplo, la salida del comando AWK se canaliza al comando cat para mostrar el carácter END OF LINE ($).
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
Al ejecutar este código, obtiene el siguiente resultado:
Output
Num = 10 $
Signo de prefijo
Siempre antepone los valores numéricos con un signo, incluso si el valor es positivo.
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Num1 = -10
Num2 = +20
Picadillo
Para% o, proporciona un cero a la izquierda. Para% x y% X, proporciona un 0x o 0X inicial, respectivamente, solo si el resultado es distinto de cero. Para% e,% E,% f y% F, el resultado siempre contiene un punto decimal. Para% gy% G, los ceros finales no se eliminan del resultado. El siguiente ejemplo describe esto:
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
Al ejecutar este código, obtiene el siguiente resultado:
Output
Octal representation = 012
Hexadecimal representation = 0XA