LA HERRAMIENTA AWK :

 

 

Es una de las cosas más fáciles de explicar y con lo que más problemas vamos a tener.

Es una herramienta de programación.

Se aproxima a la programación funcional.

Se denomina programación por patrones.

Se divide en patrones y acciones. (Acciones asociadas a patrones)

 

Acciones à Lenguaje C

 

Awk se encarga de leer la entrada ( normalmente la estándar). La divide en registros. (Cada registro es una linea à Separador de registros(¿ ))

Para cada registro buscamos concordancia con algún patrón, si se produce concordancia ejecuta la acción asociada al patrón sobre el registro.

Awk es un traductor. (La entrada puede ser una cosa, y la salida otra)

 

 

La sintaxis de awk es de dos tipos :

 

awk patrón {acción} ; patrón {acción} ;...´ [fichero de entrada]

awk -f fich.prog [fichero de entrada]

 

 

-f à Indica separador de campo.

-v à Asignación de valor.

 

 

PATRONES :

 

Los patrones son los encargados de resolver la entrada.

Funciona como un gigantesco CASE.

Si no hay patrón para una acción se ejecuta sobre todas las líneas de ficheros.

Patrón vacío es cualquier o ningún registro.

 

Tipos de patrones :

 

  1. Patrón constante : Son cadenas de caracteres fijas situadas entre barras ‘ / ’ y para las que se busca la aparición en cualquier punto del registro.
  2.  

    Ej. /patata/ {print} à Busca la cadena patata en cualquier posición

     

     

     

  3. Expresiones regulares : Son combinaciones de caracteres y operadores de carácter. Los operadores permitidos son 

 

^ à Principio de línea.

$ à Fin de línea.

[ ] à Clase de caracteres.

| à OR

* à Cero o más apariciones.

+ à Una o más apariciones.

? à Cero o una aparición.

. à Comodín.(Un carácter)

( ) à Agrupación.

- à Rango.(Utilizando caracteres ASCII)

Ej. Localice en el fichero passwd aquellos usuarios cuyo número de expediente es impar y pertenecen al grupo 109.

 

Awk ‘^f.....[13579] :.* :109 {print} [etc/passwd]

 

 

  1. Comparación de cadenas : Permiten ejecutar acciones en función de determinados valores del registro de entrada. Para acceder a partes del registro se definen las variables$1, $2...$199 que contienen automáticamente el primero, segundo...etc campo del registro. Los comparadores admitidos son :

 

~ à Identificación : Comprueba si una cadena se ajusta a un patrón.

!~ à No identificación.

== à Igualdad.

!= à Desigualdad.

<,>... à Comparación.

 

  1. Patrones compuestos : Se obtienen combinando patrones simples mediante los operadores :

 

&& à AND.

|| à OR

! à NOT.

 

  1. Patrones de rango : Se forman con dos patrones separados por una coma. Awk ejecuta la acción sobre todos los registros de la entrada situada entre el registro que coincide con el primer patrón y el que coincida con el segundo.

 

  1. Patrones BEGIN y END : Son dos patrones especiales de awk. La acción asociada al patrón BEGIN se ejecuta antes de leer ninguna línea de la entrada. Se utiliza para inicializaciones. La acción asociada a END se ejecuta después de leer el fin de fichero ; se utiliza para presentaciones de resultados. Ninguno de los dos utiliza un registro en una línea para la acción. (No se puede hacer referencia a $1, $2 ..en BEGIN o END porque no hay registros contenidos)

 

 

ACCIONES :

 

Las acciones en awk son operaciones en lenguaje C que utilizan los campos del registro que concuerdan con el patrón.

La acción vacía es equivalente a un print.

 

Variables :

 

Awk utiliza la misma nomenclatura de variables que C, pero no exige que una variable esté declarada para poder usarla.

Para poder operar con una variable debe tener un valor.

Además de las variable definidas por el usuario, awk puede acceder a todas las variables del SHELL situándolas entre comillas.

Awk también ofrece un conjunto de variables predefinido. Las más importantes son :

FS à Separador de campo.

NF à Número de campos del registro.

NR à Número de registros leídos.

FILENAME à Contiene el fichero de entrada.

ARGV à Array de argumentos de la llamada a awk.

 

Asignación :

 

-v nombe = valor

 

 

Operadores :

 

Permite operadores sobre caracteres y sobre enteros.

Los operadores permitidos son entre otros :

 

  1. Aritméticos : +, -, *, /, %,^...etc.
  2. De asignación : =, +=, -=, ^=, %=...etc.
  3. Operadores de comparación : ==, >, <, >=, <=, !=
  4. Funciones : tan, sen, cos, log, exp, sqrt, rand...etc.
  5. Funciones sobre cadena : substr, match, length, split...etc.
  6. Operadores lógicos : &&, ||, !
  7. Unión de dos cadenas : Se pone una detrás de la otra.

 

Arrays :

 

La definición de matrices en awk es idéntica a su definición en UNIX ; Un conjunto de valores que no tienen relación de tipo se encuentran unidos lógicamente por un elemento base y un conjunto de índices.

Los arrays son unidimensionales. Los índices pueden ser cualquiera.

Para acceder a un elemento de array tanto en asignación como en obtención de valor se hace uso de la sintaxis de C, que es la misma que la de pascal.

Para simplificar la gestión de arrays awk ofrece las siguientes estructuras :

 

  1. delete <BASE> [<INDICE>]à Elimina un elemento del array.
  2. <subíndice> in <BASE> à Es cierto si el subíndice existe.
  3. for <VARIABLE> in <BASE> : Realiza una iteración por índice.

sentencia 

 

Funciones definidas por el usuario :

 

La definición de una función utiliza la sintaxis de C, pero sin tipo.

Sintaxis :

 

function <nombre> (lista de parámetros)

{lista de sentencias}

 

Aquí no hay tipos, pero puede devolver un valor con la sentencia return. (Si incluye return es función , sino es procedimiento).

 

Sentencias de control :

 

Las sentencias de control de flujo son :

 

  1. if (condicion) sentencia [else][sentencia]
  2. while (condición) sentencia
  3. do (sentencia) while (condición)
  4. for (inicialización ; test ; incremento) sentencia
  5. break à Fuerza la salida del bucle.
  6. exit à finalización de la entrada.