anterior | início | próxima

Awk

característica  como fazer
--------------------------------------
busca           função match
substituição    funções sub, gensub
divisão         função split
ER crua         /entre barras/
ignore M/m      variável IGNORECASE
global          função gsub, opção "g"

AWK é uma linguagem antiga (1977) que combina processamento de texto com estruturas de uma linguagem genérica, possuindo condicionais, operações aritméticas e afins.

Temos cinco funções que utilizam ERs no AWK: match, sub, gsub, gensub e split. Em todas elas, para ignorar a diferença entre maiúsculas e minúsculas, basta definir algum valor para a variável IGNORECASE, que é vazia por padrão e, para colocar a ER no formato cru basta colocá-la entre /barras/.

As funções sub e gsub não retornam o texto alterado, e sim o número de substituições efetuadas. E ainda, o texto alterado é gravado diretamente na própria variável que continha o texto original. Uma grande limitação de ambas as funções é que elas não têm suporte a retrovisores.

texto = "a1b2c3"
n = gsub("[0-9]", ".", texto)
print n,texto

Esse trecho de código imprime 3 a.b.c., ou seja, o número de substituições efetuadas, seguido do texto modificado. A diferença entre as duas é que sub troca só a primeira ocorrência e gsub é global, troca todas.

Mas como essas funções são muito chatas de usar, no AWK da GNU tem uma melhor, a gensub. Esta é normal, retorna o texto modificado, não regrava a variável com o texto original, a globalidade do comando é definida com um argumento (g ou um número), e tem suporte a retrovisores. Veja um exemplo completo:

print gensub(/(\w)/, "\\1.", "g", "abc")

Vamos à nossa dissecação. A ER \w, que casa um caractere componente de uma palavra, está no formato cru, além de agrupada. A substituição do trecho casado é feita pelo conteúdo do grupo 1, seguido de um ponto literal.

Note que o escape do número um está duplicado, pois como apenas a ER pode ser colocada no formato cru, esse texto primeiro será interpretado pela linguagem, para depois ser mandado à função gensub.

Segue o g que indica que é uma substituição global e por fim, o texto original a ser alterado. Ah! O resultado da substituição é a.b.c., antes que eu me esqueça...

O AWK da GNU é encontrada no repositório da GNU:

Está gostando da leitura?
Está aprendendo?
Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!
anterior | início | próxima