Variables y Campos - AWK

Las variables de awk son dinámicas; se definen cuando son usadas por primera vez. Sus valores son o números de punto flotante o cadenas. awk también tiene arrays de una dimensión; los arrays multidimensionales podrían ser simulados. Existen varias variables predefinidas que awk fija según se va ejecutando un programa; éstas se resumen a continuación.

Campos



Según gawk van leyendo las líneas de entrada, las divide en campos, usando el valor de la variable FS como el separador de campos. Si FS es un único carácter, los campos son separados por ese carácter. De otro modo, se espera que FS sea una expresión regular completa. En el caso especial de que FS es un único carácter en blanco, los campos son separados por medio de espacios en blanco y/o tabuladores. Señalar que el valor de IGNORECASE también afecta a cómo se parten los campos cuando FS es una expresión regular.

Cada campo en la línea de entrada podría ser referenciado por su posición, $1, $2, y así sucesivamente. $0 es la forma de referirse a la línea completa. Se le puede también asignar un valor a un determinado campo. Los números de campo no es necesario que sean constantes:

n = 5 print $n

imprime el quinto campo de la línea de entrada. La variable NF es fijada al número total de campos de la línea de entrada.

La referencia a un campo no existente (por ejemplo, campos superiores a $NF) devuelve la cadena nula. Sin embargo, la asignación a un campo no existente (e.g., $(NF+2) = 5) incrementa el valor de NF, creando cualquier campo intermedio con la cadena nula como su valor, y hace que el valor de $0 sea modificado, con los campos separados por el valor de OFS.

Variables Implícitas (Built-in)


Las variables implícitas de awk son:

ARGC
El número de argumentos de la línea de comandos (no incluyendo las opciones el propio programa awk).

ARGV
El array de argumentos de la línea de comandos. El array es indexado desde 0 a ARGC - 1. El cambio dinámico del contenido de ARGV puede controlar los ficheros utilizados para datos.

ENVIRON
Un array que contiene el valor de las variables de entorno. El array es indexado por el nombre de la variable, siendo cada elemento el valor de esa variable. Por lo que, la variable de entorno HOME se obtendría mediante ENVIRON["HOME"]. Su valor podría ser `/u/close'.
El cambio de este array no afecta al entorno visto por los programas a los que gawk llama a través de la redirección o la función system. (Esto podría cambiar en una versión futura de gawk.)
Algunos sistemas operativos no tienen variables de entorno. El array ENVIRON está vacío cuando se está ejecutando en estos sistemas.

FILENAME
El nombre del fichero de entrada actual. Si no se especifican ficheros en la línea de comando, el valor de
FILENAME es `-'.

FNR
El número de registro de entrada en el fichero de entrada actual.

FS
El separador de campos de entrada, un blanco por defecto.

IGNORECASE
El indicador de sensibilidad a mayúsculas -minúsculas para las operaciones de expresiones regulares. Si IGNORECASE tiene un valor distinto de cero, el encaje de patrones en las reglas, el particionamiento de campos con FS, el encaje de expresiones regulares con `~' y `!~', y las funciones predefinidas gsub, index, match, split y sub todas ignoran la diferencia entre mayúsculas -minúsculas cuando realizan operaciones de expresiones regulares.

NF
El número de campos en el registro de entrada actual.

NR
El número total de registros de entrada leídos hasta el momento.

OFMT
El formato de salida para números, por defecto "%.6g".

OFS
El separador de campos de la salida, un blanco por defecto.

ORS
El separador de registros de la salida, un salto de línea (newline) por defecto.

RS
El separador de registros de entrada, por defecto un salto de línea o newline. RS es diferente, ya que solamente el primer carácter de su valor cadena se usa como separador de registros. Si se le da a RS la cadena nula, entonces los registros son separados por líneas en blanco. Si se le da a RS la cadena nula, entonces el carácter newline o salto de línea actúa siempre como separador de campos, en lugar de cualquier valor que FS pudiese tener.

RSTART
El índice del primer carácter que encaja con match; 0 si no existe ninguna concordancia o encaje.

RLENGTH
La longitud de la cadena que encaja con match; -1 si no existe ninguna concordancia o encaje.

SUBSEP
La cadena utilizada para separar subíndices múltiples en los elementos de un array, por defecto "\034".

Arrays


Los arrays son subindexados con una expresión entre corchetes (`[' y `]'). La expresión podría ser o un número o una cadena. Debido a que los arrays son asociativos, los índices que son cadenas son más representativos y no son convertidos a números.

Si utilizas múltiples expresiones separadas por comas dentro de los corchetes, entonces el subíndice del array es una cadena que consta de la concatenación de valores de subíndices individuales, convertidos a cadenas, separados por el separador de subíndices (el valor de SUBSEP).

El operador especial in podría ser útil en una sentencia if o while para ver si un array tiene un índice formado por un determinado valor.

if (val in array)
print array[val]

si el array tiene subíndices mútiples, utilice (i, j, ...) in array para chequear la existencia de un determinado elemento.

La construcción in podría ser también usada en un bucle for para hacer una iteración para todos los elementos de un array.

Un elemento podría ser eliminado de un array utilizando la sentencia delete.


Tipos de Datos


El valor de una expresión awk es siempre o un número o una cadena.

Ciertos contexto (tales como operadores aritméticos) requieren valores numéricos. Ellos convierten cadenas a números interpretando el texto de la cadena como un numérico. Si la cadena no tiene el formato de un numérico, la convierte a 0.

Ciertos contextos (tales como la concatenación) requiere valores cadena de texto. En estos contextos, los números se convierten a cadenas realizando una impresión efectiva de ellos.

Para forzar la conversión de un valor cadena de texto a numérico, simplemente súmale 0 a dicha cadena de texto. Si el valor inicial es ya un número, esta operación nunca altera su valor.

Para forzar la conversión de un valor numérico a cadena de texto, concaténale una cadena nula.

El lenguaje awk define las comparaciones como si fuesen numéricas si fuese posible, si no son posible o uno o los dos operandos se convierten a cadenas y se realiza una comparación de cadenas.

Las variables no inicializadas tienen el valor cadena “” (la cadena nula o vacía). En los contexto donde un número es requerido, esto es equivalente a 0.





Publicar un comentario

0 Comentarios