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