10 exemplos do comando awk com expressões regulares
10 exemplos do comando awk com expressões regulares no Linux
O AWK (em maiúsculas) é uma linguagem de script de domínio específico, projetada principalmente para realizar processamento de texto e busca de padrões, sendo muito empregada na extração de dados de arquivos e geração de relatórios.
Criada no Bell Labs nos anos 1970, essa linguagem oferece suporta ao tipo de dados string, além de operar com arrays associativos e expressões regulares, como os exemplos simples que veremos neste artigo.
O nome da linguagem, AWK, é derivado dos sobrenomes dos autores da linguagem em si, que são Alfred Aho, Peter Weinberger e Brian Kernighan.
No Linux/UNIX temos a ferramenta awk (escrita cm caracteres minúsculos), que permite executar scripts escritos na linguagem de programação AWK, e é isso que utilizaremos aqui.
O comando awk
O comando awk é uma ferramenta de processamento de texto no Linux que permite manipular e analisar dados de forma eficiente. Combinado com expressões regulares, o awk se torna ainda mais útil, permitindo extrair, filtrar e processar dados com bastante precisão.
Neste tutorial, vou mostrar 10 exemplos de uso da ferramenta awk com expressões regulares simples para resolver problemas comuns encontrados no dia a dia de administradores de sistemas e desenvolvedores que usam Linux.
Para demonstrar o uso da ferramenta, vamos precisar de um arquivo de texto cujo conteúdo será processado pelo awk. Vamos criar um arquivo de nome “logs.txt” em um diretório qualquer do sistema, como sua pasta de documentos, com o conteúdo a seguir (use seu editor de textos preferido; eu usei o editor nano):
Conteúdo do arquivo logs.txt
Arquivo de Log do dia 04/09/2024 Início de instalação de aplicação via terminal 08:21 Fim de instalação de aplicação 08:26 Aplicação instalada com sucesso 08:26 Erro ao abrir a aplicação 08:27 Erro ao iniciar instância de servidor 08:28 Envio de telemetria de dados ao servidor remoto 08:30 Enviando telemetria de dados para endereço server@200.201.12.66 08:30 Relatório de telemetria de dados finalizado 08:31
Após criar e salvar este arquivo, vamos aos exemplos.
1. Filtrar Linhas que Contêm uma Palavra Específica
Encontrar todas as linhas em um arquivo que contêm uma palavra específica:
awk '/palavra/' arquivo.txt
Exemplo:
$ awk '/Erro/' logs.txt
Este comando retornará todas as linhas no arquivo logs.txt que contêm a palavra “Erro”. Note que o comando é case-sensitive, ou seja, diferencia maiúsculas de minúsculas. Sendo assim, se for pesquisada a palavra erro, com e minúsculo, nada será retornado neste caso.
Uma opção para contornar esse problema é pesquisar pelas duas versões da palavra, iniciando com maiúscula e com minúscula, com segue:
$ awk '/[eE]rro/' logs.txt
A opção mais adequada nesse caso, porém, é usar a opção IGNORECASE do próprio awk, que irá ignorar maiúsculas e minúsculas, como segue:
$ awk 'BEGIN{IGNORECASE=1} /erro/' logs.txt
2. Filtrar Linhas que Não Contêm uma Palavra Específica
Para NÃO mostrar as linhas que contêm uma determinada palavra, utilize a seguinte estrutura:
awk '!/palavra/' arquivo.txt
Exemplo:
$ awk '!/Erro/' logs.txt
Aqui, todas as linhas que não contêm a palavra “erro” serão exibidas.
3. Filtrar Linhas que Começam com uma Palavra Específica
Se precisar encontrar linhas que começam com uma palavra específica, utilize o símbolo ‘^’ antes da palavra:
awk '/^palavra/' arquivo.txt
Exemplo:
$ awk '/^Início/' logs.txt
Este comando retorna todas as linhas que começam com a palavra inteira “Início” no arquivo “logs.txt”.
4. Filtrar Linhas que Terminam com uma Palavra Específica
Para encontrar linhas que terminam com uma palavra específica, use o símbolo ‘$’ após a palavra:
awk '/palavra$/' arquivo.txt
Exemplo:
$ awk '/08:30$/' logs.txt
Este comando retorna todas as linhas no arquivo logs.txt que terminam com a string “08:30” – ou seja, neste caso as linhas do arquivo de log referentes a esse horário.
5. Filtrar Linhas com Padrões de Dígitos Específicos
Se você deseja encontrar linhas que contêm uma sequência específica de dígitos, use `\d` ou `[0-9]`:
awk '/[0-9]{4}/' arquivo.txt
Exemplo:
$ awk '/[0-9]{4}/' logs.txt
Este comando encontra todas as linhas que contêm uma sequência de quatro dígitos (como um ano) no arquivo de log.
6. Filtrar Linhas que Contêm um Intervalo de Caracteres
Para encontrar linhas que contêm caracteres dentro de um intervalo específico, podemos usar o seguinte comando:
awk '/[a-z]/' arquivo.txt
Exemplo:
$ awk '/[A-E]/' logs.txt
Este comando filtra as linhas que contêm qualquer letra maiúscula no intervalo de A a E no arquivo logs.txt. No caso, serão mostradas as linhas que iniciam com A e com E maiúsculos, pois são as únicas letras dentro desse intervalo que existem no arquivo. Lembre-se que o awk é case-sensitive, então não serão retornadas linhas com as letras a, b, c, d e e minúsculas, a não ser que seja usada a opção IGNORECASE.
7. Filtrar Linhas com Palavras Iniciadas com Letras Específicas
Se desejamos filtrar linhas onde as palavras começam com uma determinada letra ou conjunto de letras, usamos:
awk '/\b[aA]/' arquivo.txt
Exemplo:
$ awk '/^[FR]/' logs.txt
Este comando retornará todas as linhas no arquivo logs.txt onde alguma palavra começa com uma das letras “F” ou “R”.
8. Filtrar Linhas que iniciem e terminem com strings específicas
Retornar as linhas que começam com a palavra “Erro” ou “erro” e terminam com a string “08:27”:
$ awk 'BEGIN{IGNORECASE=1} /^erro/ && /08:27$/' logs.txt
Neste exemplo usamos o operador lógico && (AND) para retornar apenas as linhas que atendam a ambos os critérios passados para o awk.
9. Filtrar Linhas com Palavras que Contêm Caracteres Especiais
Para filtrar linhas que contêm caracteres especiais como “@”, use a seguinte expressão regular:
awk '/[@]/' arquivo.txt
Exemplo:
$ awk '/[@]/' logs.txt
Este comando retorna todas as linhas no arquivo logs.txt que contêm o caractere “@” em qualquer posição.
10. Contar o Número de Linhas que Correspondem a um Padrão
Finalmente, se quisermos contar o número de linhas que correspondem a um padrão, usamos:
awk '/palavra/ {count++} END {print count}' arquivo.txt
Exemplo:
$ awk '/Erro/ {count++} END {print count}' logs.txt
Este comando conta quantas linhas contêm a palavra “erro” no arquivo logs.txt e imprime o total.
Conclusão
O comando awk é uma ferramenta incrivelmente poderosa para manipulação de texto em sistemas Linux, especialmente quando combinado com expressões regulares. Este tutorial mostrei 10 exemplos que demonstram como awk pode ser utilizado para filtrar e processar dados de maneira eficiente.
É isso aí! Até a próxima!
Perguntas e Respostas
O que é a linguagem AWK?
AWK é uma linguagem de programação criada em 1977 pelos cientistas Alfred Aho, Peter J. Weinberger e Brian Kernighan no laboratório Bell Labs, voltada para o processamento de texto e análise de dados em arquivos ou fluxos de entrada.
Ela permite manipular e extrair informações textuais com base em padrões e campos predefinidos.
O que é o comando awk no Linux?
O comando awk no Linux é uma ferramenta de linha de comando usada para processar e analisar texto, permitindo filtrar, formatar e transformar dados de arquivos, utilizando padrões de busca e regras definidas pelo usuário, usando linhas escritas na linguagem AWK.
O que são Expressões Regulares?
Expressões regulares são sequências de caracteres que formam um padrão de busca utilizado para encontrar, manipular ou validar partes específicas de textos, sendo amplamente usadas em linguagens de programação e ferramentas de processamento de texto.
O que é um arquivo de Log?
Um arquivo de log é um registro cronológico de eventos ou atividades de um sistema ou aplicação, geralmente utilizado para monitoramento, depuração ou análise de desempenho e erros.
Escreva um comentário