AWK - Variables integradas

AWK proporciona varias variables integradas. Desempeñan un papel importante al escribir guiones AWK. Este capítulo demuestra el uso de variables integradas.

Variables AWK estándar

Las variables AWK estándar se analizan a continuación.

ARGC

Implica el número de argumentos proporcionados en la línea de comando.

Example

[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four

Al ejecutar este código, obtiene el siguiente resultado:

Output

Arguments = 5

Pero, ¿por qué AWK muestra 5 cuando pasó solo 4 argumentos? Simplemente consulte el siguiente ejemplo para aclarar su duda.

ARGV

Es una matriz que almacena los argumentos de la línea de comandos. El índice válido de la matriz varía de 0 a ARGC-1.

Example

[jerry]$ awk 'BEGIN { 
   for (i = 0; i < ARGC - 1; ++i) { 
      printf "ARGV[%d] = %s\n", i, ARGV[i] 
   } 
}' one two three four

Al ejecutar este código, obtiene el siguiente resultado:

Output

ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three

CONVFMT

Representa el formato de conversión de números. Su valor predeterminado es%.6g.

Example

[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'

Al ejecutar este código, obtiene el siguiente resultado:

Output

Conversion Format = %.6g

REINAR

Es una matriz asociativa de variables de entorno.

Example

[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'

Al ejecutar este código, obtiene el siguiente resultado:

Output

jerry

Para buscar nombres de otras variables de entorno, use env mando.

NOMBRE DEL ARCHIVO

Representa el nombre del archivo actual.

Example

[jerry]$ awk 'END {print FILENAME}' marks.txt

Al ejecutar este código, obtiene el siguiente resultado:

Output

marks.txt

Tenga en cuenta que FILENAME no está definido en el bloque BEGIN.

FS

Representa el separador de campo (entrada) y su valor predeterminado es el espacio. También puede cambiar esto usando-F opción de línea de comando.

Example

[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte

Al ejecutar este código, obtiene el siguiente resultado:

Output

FS =  $

NF

Representa el número de campos del registro actual. Por ejemplo, el siguiente ejemplo imprime solo aquellas líneas que contienen más de dos campos.

Example

[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'

Al ejecutar este código, obtiene el siguiente resultado:

Output

One Two Three
One Two Three Four

NR

Representa el número del registro actual. Por ejemplo, el siguiente ejemplo imprime el registro si el número de registro actual es menor que tres.

Example

[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'

Al ejecutar este código, obtiene el siguiente resultado:

Output

One Two
One Two Three

FNR

Es similar a NR, pero relativo al archivo actual. Es útil cuando AWK está operando en varios archivos. El valor de FNR se restablece con un archivo nuevo.

OFMT

Representa el número de formato de salida y su valor predeterminado es %.6g.

Example

[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'

Al ejecutar este código, obtiene el siguiente resultado:

Output

OFMT = %.6g

OFS

Representa el separador del campo de salida y su valor predeterminado es el espacio.

Example

[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte

Al ejecutar este código, obtiene el siguiente resultado:

Output

OFS =  $

ORS

Representa el separador de registros de salida y su valor predeterminado es nueva línea.

Example

[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte

Al ejecutar el código anterior, obtiene el siguiente resultado:

Output

ORS = $
$

LONGITUD

Representa la longitud de la cuerda que coincide con matchfunción. La función de coincidencia de AWK busca una cadena determinada en la cadena de entrada.

Example

[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'

Al ejecutar este código, obtiene el siguiente resultado:

Output

2

RS

Representa el separador de registros (de entrada) y su valor predeterminado es nueva línea.

Example

[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte

Al ejecutar este código, obtiene el siguiente resultado:

Output

RS = $
$

RSTART

Representa la primera posición en la cadena que coincide con match función.

Example

[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'

Al ejecutar este código, obtiene el siguiente resultado:

Output

9

SUBSEP

Representa el carácter separador para subíndices de matriz y su valor predeterminado es \034.

Example

[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte

Al ejecutar este código, obtiene el siguiente resultado:

Output

SUBSEP = ^\$

$ 0

Representa el registro de entrada completo.

Example

[jerry]$ awk '{print $0}' marks.txt

Al ejecutar este código, obtiene el siguiente resultado:

Output

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

$ n

Representa el n- ésimo campo en el registro actual donde los campos están separados por FS.

Example

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

Al ejecutar este código, obtiene el siguiente resultado:

Output

Physics   80
Maths     90
Biology   87
English   85
History   89

Variables específicas de GNU AWK

Las variables específicas de GNU AWK son las siguientes:

ARGIND

Representa el índice en ARGV del archivo actual que se está procesando.

Example

[jerry]$ awk '{ 
   print "ARGIND   = ", ARGIND; print "Filename = ", ARGV[ARGIND] 
}' junk1 junk2 junk3

Al ejecutar este código, obtiene el siguiente resultado:

Output

ARGIND   =  1
Filename =  junk1
ARGIND   =  2
Filename =  junk2
ARGIND   =  3
Filename =  junk3

BINMODE

Se utiliza para especificar el modo binario para todas las E / S de archivos en sistemas que no son POSIX. Los valores numéricos de 1, 2 o 3 especifican que los archivos de entrada, los archivos de salida o todos los archivos, respectivamente, deben utilizar E / S binarias. Valores de cadena der o wespecificar que los archivos de entrada o los archivos de salida, respectivamente, deben usar E / S binarias. Valores de cadena derw o wr especificar que todos los archivos deben utilizar E / S binarias.

ERRNO

Una cadena indica un error cuando falla una redirección para getline o si close la llamada falla.

Example

[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'

Al ejecutar este código, obtiene el siguiente resultado:

Output

Error: No such file or directory

ANCHOS DE CAMPO

Se establece una lista separada por espacios de la variable de ancho de campo, GAWK analiza la entrada en campos de ancho fijo, en lugar de usar el valor de la variable FS como separador de campo.

IGNORAR CASO

Cuando se establece esta variable, GAWK no distingue entre mayúsculas y minúsculas. El siguiente ejemplo demuestra esto:

Example

[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt

Al ejecutar este código, obtiene el siguiente resultado:

Output

1) Amit  Physics   80

HILAS

Proporciona control dinámico de la --lintopción del programa GAWK. Cuando se establece esta variable, GAWK imprime advertencias de pelusa. Cuando se asigna el valor de cadena fatal, las advertencias de pelusa se convierten en errores fatales, exactamente como--lint=fatal.

Example

[jerry]$ awk 'BEGIN {LINT = 1; a}'

Al ejecutar este código, obtiene el siguiente resultado:

Output

awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect

PROCINFO

Se trata de una matriz asociativa que contiene información sobre el proceso, como números UID reales y efectivos, número de identificación del proceso, etc.

Example

[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'

Al ejecutar este código, obtiene el siguiente resultado:

Output

4316

TEXTDOMAIN

Representa el dominio de texto del programa AWK. Se utiliza para encontrar las traducciones localizadas de las cadenas del programa.

Example

[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'

Al ejecutar este código, obtiene el siguiente resultado:

Output

messages

La salida anterior muestra texto en inglés debido a en_IN lugar