PDF de programación - Introducción a AWK

Imágen de pdf Introducción a AWK

Introducción a AWKgráfica de visualizaciones

Publicado el 16 de Abril del 2017
2.928 visualizaciones desde el 16 de Abril del 2017
118,8 KB
15 paginas
Creado hace 15a (28/07/2008)
Introducción a AWK

Francisco Alonso Sarría

Índice

1 Introducción

1.1 Adaptar awk .

.

.

. . . . . . . . . . . . . . . . . . . . . . . . . .

2 Patrones y acciones

3 Variables y arrays

4 Entrada y salida de datos

4.1 Entrada de datos .
4.2 Salida de datos
.

. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .

5 Estructuras de control

5.1 Toma de decisiones . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Bucles .

.

.

.

.

.

6 Funciones

6.1 Funciones matemáticas . . . . . . . . . . . . . . . . . . . . . . .
6.2 Funciones de manejo de cadenas de caracteres . . . . . . . . . . .
6.3 Funciones definidas por el usuario . . . . . . . . . . . . . . . . .

7 AWK y BASH

. . . . . . . . . . . . . . . . . . . . . . .
7.1 Entrada de parámetros
7.2 Formateo de ordenes
. . . . . . . . . . . . . . . . . . . . . . . .
7.3 Llamadas al sistema . . . . . . . . . . . . . . . . . . . . . . . . .

1

2
4

4

5

6
6
6

8
8
9

11
11
11
13

13
13
14
15

1

Introducción

AWK es un lenguaje de programación cuya potencia estriba en la capacidad de
obtener grandes resultados con programas de unas pocas lineas. Está especialmente
diseñado para leer y procesar archivos de texto por lo que resulta muy útil su uso
combinado con utras utilidades del sistema operativo.
Para ejecutar un programa escrito en AWK es necesario llamar al programa intér-
prete del lenguaje (awk) utilizando como parámetros un programa, escrito entre
comillas simples, y uno o varios ficheros para procesar de acuerdo con ese pro-
grama.
AWK asume que va a tener que procesar un flujo de datos (entrada estandar, fichero
de texto, tubería) y que este flujo está medianamente estructurado en registros (lin-
eas) y campos (columnas).
Por tanto sabe que tiene que leer cada una de sus lineas como si fuese un reg-
istro, separar ese registro en campos, hacer lo que se le ordene con esos campos
y finalmente producir un flujo de salida. Así que el programador apenas tiene que
introducir ningún tipo de instrucción al respecto en el código.
Por ejemplo en la orden:

awk ’{print}’ fichero.txt

2
4
3
5

4
3

2

3
3
3
4

3
5
2
2

el programa de AWK es sólo {print}. Este programa lee todas las lineas del
archivo fichero.txt y las muestra en pantalla. En casi todos los ejemplos va-
mos a trabajar con el archivo fichero.txt cuyo contenido es:
Murcia
Albacete
Almería
Alicante
En algunos de los ejemplos que se verán el programa completo será lo suficiente-
mente corto para poder aparecer entero en el texto, en estos casos el código empieza
con la llamada al intérprete (awk)1. En otros casos se presentarán lineas de código
de AWK aisladas.
Una de las peculiaridades que permite al intérprete de AWK trabajar como lo hace,
es que al leer cada linea da valores a una serie de variables predefinidas:

• NR es el número de la linea que ha leido
1En linux puedes encontrar otos intérpretes de AWK como gawk o nawk.

2

• NF es el número de campos en la linea que ha leido
• $0 contiene toda la linea leida
• $1, $2, ... $NF cada uno de los campos leidos

Por ejemplo la orden

awk ’{print $NR,$0 }’ fichero.txt

muestra en pantalla las lineas del fichero numeradas.
1 Murcia
2 Albacete
3 Almería
4 Alicante
La orden:

3
5
2
2

3
3
3
4

2
4
3
5

4
3

2

awk ’{print $1," ",$4}’ fichero.txt

mostrará los campos primero y cuarto separados por 3 espacios (uno por cada coma
y otro que corresponde a la cadena de caracteres entre las comas):
Murcia
Albacete
Almería
Alicante
Entre las principales utilidades de AWK destaca:

3
5
2
2

• Permite producir resúmenes a partir de grandes listados de datos mediana-

mente estructurados

• Los programas son mucho más cortos que los equivalentes en otros lenguajes
• La posibilidad de crear programas de una sola linea embebidos en shell
scripts e integrados con otras utilidades del sistema mediante redirecciones
o tubería. Por ejemplo la orden ls − l genera un listado largo de ficheros en
los que el quinto campo corresponde al tamaño, así la orden:

ls -l|awk ’$5>200000{print $0}’>grandes.txt

modifica la orden ls para que obtengamos sólo los ficheros mayores de 200
Kbytes y guarda ese listado en el fichero grandes.txt.

3

1.1 Adaptar awk

La adaptación del sistema linux al lenguaje español ha traido algunas complica-
ciones, como por ejemplo la sustitución del punto decimal por la coma. Esto no
sería un problema en programas de AWK que funcionasen aislados, pero si es un
inconveniente cuando se utiliza para procesar información de o hacia otros progra-
mas que si usan el punto decimal. Para evitar este inconveniente basta con ejecutar,
antes de la llamada a AWK, las siguientes órdenes de BASH.

unset LC_ALL
export LC_NUMERIC=C

2 Patrones y acciones

En el último ejemplo de la sección anterior se ha visto como awk trataba de manera
diferente a las lineas cuyo quinto campo era mayor que 200000 (las reconducía a
la salida) que a las que no (se eliminaban). En general, en cualquier programa,
las acciones que deben desarrollarse van a depender de los valores leidos. Para
facilitar el trabajo, awk dispone de una estructura patrón {acción}. Es decir
se definen varias acciones (separadas con llaves) que se ejecutan sólo si la linea
leida cumple el patrón que aparece al inicio. Por ejemplo:

awk ’$3>=4{print $0)’ fichero.txt

presentará en pantalla sólo aquellos casos en los que la tercera columna tenga una
valor mayor que 4.
Aparte de permitirnos definir los patrones que queramos, awk introduce dos pa-
trones especiales BEGIN y END. El primero permite definir acciones que se eje-
cutarán antes de empezar a procesar el fichero de entrada, el segundo acciones que
se ejecutaran al final del proceso.

awk ’

BEGIN{print "Provincia V1 V2 V3 V4"}
$3>4{print $0}
END{print "ADIOS."}

’ fichero.txt

4

El patrón BEGIN permite tambien modificar algunas variables clave para el fun-
cionamiento de AWK como FS y RS que definen, respectivamente, el separador de
campos (por defecto un espacio en blanco) y el separador de registros (por defecto
la nueva linea).
Así BEGIN {FS=";"} permite procesar ficheros en los que los campos se sepa-
ren por punto y coma.
En definitiva la estructura de un programa de AWK se basa en el siguiente esquema:

BEGIN {acción}
patrón {acción}

..

..

patrón {acción}
END {acción}

Hay que tener en cuenta que si una linea cumple con varios patrones se ejecutarán
todas las acciones asociadas en el mismo orden en que aparecen en el programa.

3 Variables y arrays

Ya has visto como el interprete de AWK da valor a una serie de variables internas
conforme va leyendo el flujo de datos de entrada. Lógicamente el usuario puede
también definir sus propias variables. Por ejemplo:

awk ’{V4=$4;print NR,V4}’ fichero.txt

También se admite el uso de arrays asociativos, es decir vectores de datos indexa-
dos por una variable arbitraria, una cadena de caracteres por ejemplo:

awk ’

{V1[$1]=$2;V2[$1]=$3}
END{print V2["Albacete"]}

’ fichero.txt

El anterior ejemplo utiliza el primer campo del flujo de entrada como variable para
indexar dos arrays.

5

4 Entrada y salida de datos

4.1 Entrada de datos

Ya se ha visto como awk está especialmente concebido para leer ficheros sin
necesidad de funciones especiales. Sin embargo en algunos casos se hace nece-
sario combinar varios ficheros de entrada en un sólo programa. Hay dos opciones:

• Leerlos uno detrás del otro. Para ello es necesario darle al programa algún

método para distinguir un fichero del siguiente.

• Leerlos con la función getline, por ejemplo linea = getline <00 f ichero.txt00

– getline, lee una nueva linea del flujo de entrada
– getline linea, lee una nueva y la guarda en linea
– getline linea < "fichero", lee una linea de fichero y la

guarda en linea

– close(fichero); cierra un fichero o flujo de texto abierto con al-

guna llamada a getline.

4.2 Salida de datos

La función básica de salida en AWK es print

awk ’{nombre="Pepe";print "Hola",nombre}

dará como resultado:

Hola Pepe

Dentro de un programa de AWK pueden utilizarse las mismas redirecciones que en
BASH para llevar la salida a un fichero:
print "Hola a un fichero">"fichero_salida.txt"

print "Hola a un fichero">>"fichero_salida.txt"
Lógicamente el fichero de salida podría venir definido por una variable:
salida="fichero_salida.txt"; print "Hola a un fichero">"$salida

6

%d
%nd
%f

Número entero
Número entero formateado a n caracteres
Número real

%m.nf Número real con n decimales formateado a m caracteres

%s

Cadena de carácteres

Tabla 1: Códigos de formato de printf (versión simplificada)

El separador de campos para la salida del programa es, por defecto el espacio en
blanco; el separador de registros es el retorno de carro. Ambos separadores pueden
modificarse con las variables OFS y ORS
Más sofisticada que print es la función printf donde la f final significa for-
mateada, es decir permite determinar exactamente que forma tendrá la linea de
salida de manera muy similar a como lo hace la orden printf en BASH o C. Por
ejemplo2:

awk ’{

printf("Registro número %d:

Provincia=%s

Variable 1=%d \

Variable 2=%5d\n",NR,$1,$2,$3)

}’ fichero.txt

produce la siguiente salida:

Registro número 1:
Registro número 2:
Registro número 3:
Registro número 4:

Provincia=Murcia
Provincia=Albacete
Provincia=Almería
Provincia=Alicante

Variable 1=3

Variable 2=

2

Variable 1=3

Variable 2=

Variable 1=3

Variable 2=

Variable 1=4

Variable 2=

3

4

5

printf es una función y por tanto sus argumentos se sitúan entre paréntesis. El
primer argumento es el formato entrecomillado, posteriormente se incluyen como
argumentos las variables que se van a escribir. En el formato se puede incluir
cualquier conjunto de carácteres más combinaciones especiales de caracteres que
se inician con el carácter % y que indican como se van a imprimir el resto de los
argumentos de la función (ver tabla 1):
Utiliza también caracteres especiales como \n que significa salto de linea o \t
que significa ta
  • Links de descarga
http://lwp-l.com/pdf2959

Comentarios de: Introducción a AWK (1)

Otto Franklin Matute
18 de Octubre del 2019
estrellaestrellaestrellaestrellaestrella
Excelente web, sigan así ... felicitaciones!!!.
Responder

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad