Pesquisa de site

Aprenda como usar variáveis integradas do Awk - Parte 10


À medida que descobrimos a seção de recursos do Awk, nesta parte da série, examinaremos o conceito de variáveis integradas no Awk. Existem dois tipos de variáveis que você pode usar no Awk, são elas; Variáveis definidas pelo usuário, que abordamos na Parte 8 e variáveis integradas.

Variáveis integradas têm valores já definidos no Awk, mas também podemos alterar cuidadosamente esses valores. As variáveis incorporadas incluem:

  1. FILENAME : nome do arquivo de entrada atual (não altere o nome da variável)
  2. FR : número da linha de entrada atual (que é a linha de entrada 1, 2, 3… assim por diante, não altere o nome da variável)
  3. NF : número de campos na linha de entrada atual (não altere o nome da variável)
  4. OFS : separador de campo de saída
  5. FS : separador de campo de entrada
  6. ORS : separador de registro de saída
  7. RS : separador de registros de entrada

Vamos ilustrar o uso de algumas das variáveis integradas do Awk acima:

Para ler o nome do arquivo de entrada atual, você pode usar a variável interna FILENAME da seguinte forma:

awk ' { print FILENAME } ' ~/domains.txt 

Você perceberá que o nome do arquivo é impresso para cada linha de entrada, esse é o comportamento padrão do Awk quando você usa a variável interna FILENAME.

Utilizando NR para contar o número de linhas (registros) em um arquivo de entrada, lembre-se que ele também conta as linhas vazias, como veremos no exemplo abaixo.

Quando visualizamos o arquivo domains.txt usando o comando cat, ele contém 14 linhas com texto e 2 linhas vazias:

cat ~/domains.txt

awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt 

Para contar o número de campos em um registro ou linha, usamos a variável interna NR da seguinte forma:

cat ~/names.txt

awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt

A seguir, você também pode especificar um separador de campo de entrada usando a variável interna FS, que define como o Awk divide as linhas de entrada em campos.

O valor padrão para FS é espaço e tab, mas podemos alterar o valor de FS para qualquer caractere que instruirá o Awk a dividir as linhas de entrada de acordo.

Existem dois métodos para fazer isso:

  1. um método é usar a variável integrada FS
  2. e a segunda é invocar a opção -F Awk

Considere o arquivo /etc/passwd em um sistema Linux, os campos neste arquivo são divididos usando o caractere :, para que possamos especificá-lo como o novo separador de campos de entrada quando queremos filtrar determinados campos como nos exemplos a seguir:

Podemos usar a opção -F da seguinte maneira:

awk -F':' '{ print $1, $4 ;}' /etc/passwd

Opcionalmente, também podemos aproveitar a variável integrada FS conforme abaixo:

awk ' BEGIN {  FS=“:” ; }  { print $1, $4  ; } ' /etc/passwd

Para especificar um separador de campos de saída, use a variável interna OFS, ela define como os campos de saída serão separados usando o caractere que usamos como no exemplo abaixo:

awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd

Nesta Parte 10, exploramos a ideia de usar variáveis integradas do Awk que vêm com valores predefinidos. Mas também podemos alterar esses valores, porém, não é recomendado fazê-lo a menos que você saiba o que está fazendo, com o entendimento adequado.

Depois disso, prosseguiremos para cobrir como podemos usar variáveis shell nas operações de comando do Awk, portanto, fique conectado ao Tecmint.