Arrays en AWK

Un array es una tabla de varios valores, llamados elementos. Los elementos de un array se distinguen por sus índices. Los índices pueden ser tanto cadenas como números. Cada array tiene un nombre, que es similar al nombre de una variable, pero no debe estar siendo usado como nombre de variable en un mismo programa awk.

Introducción a los Arrays

El lenguaje awk tiene arrays de una dimensión para almacenar grupos de cadenas o números relacionados.

Todos los arrays en awk deben tener un nombre. Los nombres de los arrays presentan la misma sintáxis que los nombres de variables; cualquier nombre de variable válido será un nombre válido para un array. Pero no se puede usar un mismo nombre para un array y una variable en un mismo programa awk.

Los arrays en awk se asemejan superficialmente a los arrays en otros lenguajes de programación; pero existen diferencias fundamentales. En awk, no es necesario especificar el tamaño de un array antes de empezar a usarlo. Lo que és más, en awk, cualquier número o incluso cadena podría ser usado como un índice de array.

En la mayoría de otros lenguajes, tienes que declarar un array y especificar cuantos elementos o componentes tiene. En dichos lenguajes, la declaración causa la reserva de un bloque de memoria contiguo para tantos elementos como se hayan especificado. Un índice para esos arrays debe ser un entero positivo, por ejemplo, el índice 0 especifica el primer elemento del array, el cual se encuentra realmente almacenado al principio del bloque de memoria reservado. Índice 1 especifica el segundo elemento, el cual está almacenado en la memoria justo a continuación del primer elemento, y así sucesivamente. No es posible añadir más elementos al array, porque la reserva de memoria ya se ha realizado para el número de elementos que se declaró inicialmente que iba a tener el array.

Un array contiguo de cuatro elementos podría presentar una forma similar a la siguiente, conceptualmente, si los valores de los elementos son 8, “foo”,”” y 30:

+---------+---------+--------+---------+
|     8     |   "foo"  |    ""    |     30   |   value
+---------+---------+--------+---------+
      0            1          2          3          index

Solamente los valores son almacenados; los índices son implícitos por el orden de los valores. 8 es el valor del índice 0, porque 8 aparece en la posición con 0 elementos antes de él.

Los arrays en awk son diferentes: son asociativos. Esto significa que cada array es una colección de pares: un índice, y su valor de elemento de array correspondiente:

  • Elemento 4 Valor 30
  • Elemento 2 Valor "foo"
  • Elemento 1 Valor 8
  • Elemento 3 Valor ""

Hemos mostrado los pares en un orden aleatorio porque el orden no tiene ningúnsignificado.
Una ventaja de un array asociativo es que puedes añadir nuevas parejas en cualquier momento. Por ejemplo, supón que añadimos a ese array un elemento décimo cuyo valor es “número diez”. El resultado es este:

  • Elemento 10 Valor "número diez"
  • Elemento 4 Valor  30
  • Elemento 2  Valor "foo"
  • Elemento 1 Valor 8
  • Elemento 3  Valor ""

Ahora el array es disperso (algunos índices no aparecen): tiene los elementos 4 y 10, pero no tiene los elementos 5, 6, 7, 8, y 9.
Otra consecuencia de los arrays asociativos es que los índices no tienen por qué ser enteros positivos. Cualquier número, o incluso una cadena, puede ser un índice de un array. Por ejemplo, aquí está un array el cual traduce palabras de Inglés a Francés:

  • Elemento "dog" Valor "chien"
  • Elemento "cat" Valor "chat"
  • Elemento "one" Valor "un"
  • Elemento 1 Valor "un"

Aquí nosotros decidimos traducir el número 1 en ambas formas, la forma numérica y alfabética, lo que supone un ejemplo claro de que un array puede tener ambos números y cadenas como índices.
Cuando awk crea un array para ti, por ejemplo con la función implícita split, esos índices del array son enteros consecutivos que comienzan con el 1.





























Publicar un comentario

0 Comentarios