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