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 FourAo executar este código, você obtém o seguinte resultado -
Output
Arguments = 5Mas 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 fourAo executar este código, você obtém o seguinte resultado -
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = threeCONVFMT
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 = %.6gENVIRON
É 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
jerryPara 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.txtAo executar este código, você obtém o seguinte resultado -
Output
marks.txtObserve 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 -vteAo 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 FourNR
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 ThreeFNR
É 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 = %.6gOFS
Ele representa o separador de campo de saída e seu valor padrão é espaço.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vteAo 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 -vteAo 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
2RS
Ele representa o separador de registro (entrada) e seu valor padrão é nova linha.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vteAo 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
9SUBSEP
Ele representa o caractere separador para os subscritos da matriz e seu valor padrão é \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vteAo 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.txtAo 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.txtAo executar este código, você obtém o seguinte resultado -
Output
Physics   80
Maths     90
Biology   87
English   85
History   89Variá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 junk3Ao executar este código, você obtém o seguinte resultado -
Output
ARGIND   =  1
Filename =  junk1
ARGIND   =  2
Filename =  junk2
ARGIND   =  3
Filename =  junk3BINMODE
É 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 directoryFIELDWIDTHS
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.txtAo executar este código, você obtém o seguinte resultado -
Output
1) Amit  Physics   80LINT
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 effectPROCINFO
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
4316TEXTDOMAIN
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
messagesA saída acima mostra texto em inglês devido a en_IN localidade