Opciones De Entrada Y Salida en AWK
El manejo de los formatos de entrada y salida en AWK es una de las cosas mas comunes que se pueden hacer con él, ya que este programa está diseñado para la creación de análisis y reportes.
Para la entrada podemos utilizar la redirección <
de Linux o Unix.
$ gawk -f inout.awk < input.dat
AWK es un lenguaje interpretado pero está diseñado para recibir argumentos de la terminal, ya sea de archivos de texto o redirecciones de procesos. Por lo que no se necesitan argumentos para definir archivos de entrada.
Manejo de la salida con el comando print
El primer ejemplo es leer un archivo separado por |
y sin encabezado, podemos
generar anotaciones en el bloque BEGIN
para generar encabezados, o párrafos de
explicación al generar reportes, en la salida lo convertimos a una tabla
separada por tabs.
#!/bin/gawk
# PROGRAMA: inout1.awk
# AUTOR: Otto Hahn Herrera
# FECHA: 2020-05-27
# PROPOSITO: Demostrar las opciones de entrada y salida en AWK
# En este caso es un separador diferente usa inout-test1.dat
BEGIN {FS="|";
print "Worker\tWorkplace";
print "-----------------"
}
{print $1 "\t" $3}
El segundo ejemplo, es un CSV normal con encabezado que se convierte en una tabla separada por tabs.
#!/bin/gawk
# PROGRAMA: inout1.awk
# AUTOR: Otto Hahn Herrera
# FECHA: 2020-05-27
# PROPOSITO: Demostrar las opciones de entrada y salida en AWK
# En este caso definimos el separador e ignoramos el encabezado
BEGIN {FS=",";
print "Worker\tAge";
print "-----------";
}
NR > 1 {print $1 "\t" $2} # NR>1 indica que ignoremos la primera línea
Podemos definir el separador de salida en el bloque BEGIN
como veremos en el
siguiente ejemplo
#!/bin/gawk
# PROGRAMA: inout3.awk
# AUTOR: Otto Hahn Herrera
# FECHA: 2020-05-27
# PROPOSITO: Demostrar las opciones de entrada y salida en AWK
# En este caso definimos el separador de salida y el separador de la entrada
BEGIN {FS="|";
OFS="\t";
print "Worker", "Age";
print "------", "---"
}
{print $1, $2}
Manejo de la salida con el comando printf
El comando printf
nos da mucho mas control a la hora de preparar la salida de
nuestros análisis, filtros o procesos. Este comando sigue la sintaxis del
comando printf de C.
Modificador | Tipo | Descripción |
---|---|---|
N$ |
posicional | un número seguido de un $ indica un campo |
- |
formato | rellena el campo a la izquierda con espacios |
+ |
formato | antes de la anchura justifica a la derecha |
0 |
formato | rellena campos numéricos con ceros |
' |
formato | pone comas para separar los miles |
%Ns |
formato | da al anchura mínima de N |
.prec |
formato | número de dígitos a imprimir después del punto |
Las letras para el control de formato son:
%a
,%A
exadecimal de punto flotante%d
,i
entero decimal%e
,%E
flotante en notación científica%f
real en notación de punto flotante%F
igual que%f
pero pone INF y NAN en mayúsculas%g
,%G
flotante en científica o flotante que use menos caracteres%o
entero octal%s
cadena de texto%u
entero decimal sin signo%x
,%X
entero hexadecimal sin signo