AWK - Variáveis Integradas
AWK fornece várias variáveis integradas. Eles desempenham um papel importante ao escrever scripts AWK. Este capítulo demonstra o uso de variáveis internas.
Variáveis AWK padrão
As variáveis AWK padrão são discutidas abaixo.
ARGC
Isso implica o número de argumentos fornecidos na linha de comando.
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Ao executar este código, você obtém o seguinte resultado -
Output
Arguments = 5
Mas por que AWK mostra 5 quando você passou apenas 4 argumentos? Basta verificar o exemplo a seguir para esclarecer suas dúvidas.
ARGV
É uma matriz que armazena os argumentos da linha de comando. O índice válido da matriz varia 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
Ao executar este código, você obtém o seguinte resultado -
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
Ele representa o formato de conversão para números. Seu valor padrão é%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Ao executar este código, você obtém o seguinte resultado -
Output
Conversion Format = %.6g
ENVIRON
É uma matriz associativa de variáveis de ambiente.
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Ao executar este código, você obtém o seguinte resultado -
Output
jerry
Para encontrar nomes de outras variáveis de ambiente, use env comando.
NOME DO ARQUIVO
Ele representa o nome do arquivo atual.
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
Ao executar este código, você obtém o seguinte resultado -
Output
marks.txt
Observe que FILENAME não está definido no bloco BEGIN.
FS
Ele representa o separador de campo (entrada) e seu valor padrão é espaço. Você também pode alterar isso usando-F opção de linha de comando.
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Ao executar este código, você obtém o seguinte resultado -
Output
FS = $
NF
Ele representa o número de campos no registro atual. Por exemplo, o exemplo a seguir imprime apenas as linhas que contêm mais de dois campos.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Ao executar este código, você obtém o seguinte resultado -
Output
One Two Three
One Two Three Four
NR
Representa o número do registro atual. Por exemplo, o exemplo a seguir imprime o registro se o número do registro atual for menor que três.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Ao executar este código, você obtém o seguinte resultado -
Output
One Two
One Two Three
FNR
É semelhante ao NR, mas relativo ao arquivo atual. É útil quando o AWK está operando em vários arquivos. O valor de FNR é redefinido com novo arquivo.
OFMT
Ele representa o número do formato de saída e seu valor padrão é %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Ao executar este código, você obtém o seguinte resultado -
Output
OFMT = %.6g
OFS
Ele representa o separador de campo de saída e seu valor padrão é espaço.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Ao executar este código, você obtém o seguinte resultado -
Output
OFS = $
ORS
Ele representa o separador de registro de saída e seu valor padrão é nova linha.
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Ao executar o código acima, você obtém o seguinte resultado -
Output
ORS = $
$
RLENGTH
Representa o comprimento da string correspondida por matchfunção. A função de correspondência do AWK procura uma determinada string na string de entrada.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Ao executar este código, você obtém o seguinte resultado -
Output
2
RS
Ele representa o separador de registro (entrada) e seu valor padrão é nova linha.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Ao executar este código, você obtém o seguinte resultado -
Output
RS = $
$
RSTART
Representa a primeira posição na string correspondida por match função.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Ao executar este código, você obtém o seguinte resultado -
Output
9
SUBSEP
Ele representa o caractere separador para os subscritos da matriz e seu valor padrão é \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Ao executar este código, você obtém o seguinte resultado -
Output
SUBSEP = ^\$
$ 0
Ele representa todo o registro de entrada.
Example
[jerry]$ awk '{print $0}' marks.txt
Ao executar este código, você obtém o seguinte resultado -
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
Ele representa o enésimo campo no registro atual onde os campos são separados por FS.
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Ao executar este código, você obtém o seguinte resultado -
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
Variáveis específicas GNU AWK
As variáveis específicas do GNU AWK são as seguintes -
ARGIND
Representa o índice em ARGV do arquivo atual sendo processado.
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
Ao executar este código, você obtém o seguinte resultado -
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
É usado para especificar o modo binário para todas as E / S de arquivo em sistemas não POSIX. Os valores numéricos de 1, 2 ou 3 especificam que os arquivos de entrada, arquivos de saída ou todos os arquivos, respectivamente, devem usar E / S binária. Valores de string der ou wespecificar que os arquivos de entrada ou de saída, respectivamente, devem usar E / S binária. Valores de string derw ou wr especificar que todos os arquivos devem usar E / S binária.
ERRNO
Uma string indica um erro quando um redirecionamento falha para getline ou se close a chamada falha.
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Ao executar este código, você obtém o seguinte resultado -
Output
Error: No such file or directory
FIELDWIDTHS
Uma lista separada por espaços de variáveis de larguras de campo é definida, o GAWK analisa a entrada em campos de largura fixa, em vez de usar o valor da variável FS como separador de campo.
IGNORAR CASO
Quando esta variável é definida, o GAWK não diferencia maiúsculas de minúsculas. O exemplo a seguir demonstra isso -
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Ao executar este código, você obtém o seguinte resultado -
Output
1) Amit Physics 80
LINT
Ele fornece controle dinâmico do --lintopção do programa GAWK. Quando esta variável é definida, o GAWK imprime avisos de lint. Quando atribuído ao valor de string fatal, os avisos de lint tornam-se erros fatais, exatamente como--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Ao executar este código, você obtém o seguinte resultado -
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
PROCINFO
Esta é uma matriz associativa que contém informações sobre o processo, como números UID reais e efetivos, número de identificação do processo e assim por diante.
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Ao executar este código, você obtém o seguinte resultado -
Output
4316
TEXTDOMAIN
Ele representa o domínio de texto do programa AWK. É usado para encontrar as traduções localizadas para as strings do programa.
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Ao executar este código, você obtém o seguinte resultado -
Output
messages
A saída acima mostra texto em inglês devido a en_IN localidade