Comando awk: Pesquise, filtre e formate dados

Compartilhe:

monitor mostrando códigos do comando awk para filtrar e formatar dados.

Você precisa de um comando no terminal para pesquisar, filtrar, processar e formatar dados ? O comando awk é a solução que busca.

O awk é muito útil quando precisa extrair e formatar dados de arquivos (como “.CSV”), ou, através de uso de pipelines no shell.

Neste guia, você aprenderá a instala-lo, entender seu funcionamento e aprender a usa-lo com exemplos práticos que podem ser utilizados na administração de sistemas linux.


Pré-requisitos

Para ter um melhor aproveitamento dos conhecimentos técnicos demonstrados no artigo, você precisa de:

  • Computador com distribuição linux (debian, ubuntu, redhat ou derivados) instalada.
  • Acesso ao terminal com usuário root para instalar o comando awk, caso não esteja instalado.

O que é o comando awk ?

O awk é um comando que faz busca e processamento de padrões de texto, ele recebe da entrada padrão, normalmente de um arquivo ou pipline da linha de comando o fluxo de dados, filtra os campos e executa ações conforme regras definidas.

Na prática, ele permite extrair informações de arquivos de configuração, logs de aplicações, calcular valores, sem precisar desenvolver um programa completo.

AWK também é considerado uma linguagem de programação porque o comando permite escrever instruções, tomar decisões, repetir operações, armazenar dados e criar programas para processar informações. Veja os principais recursos que ele oferece:

  • Variáveis para armazenar valores.
  • Operadores para realizar cálculos e comparações.
  • Condicionais para executar ações dependendo de uma condição (if, else).
  • Laços de repetições.
  • Funções para reutilizar blocos de código.
  • Expressões regulares.

Esses recursos permitem construir algoritmos com instruções para resolver problemas.

Para instalar o awk (Gnu Awk – gawk) em distribuições baseadas em Debian e Ubuntu, utilize o gerenciador de pacotes apt:

Em distribuições como Red Hat, AlmaLinux ou Rocky Linux, a instalação é realizada via dnf:

Como executar o comando awk ?

O comando awk é executado na linha de comando, mas primeiro é preciso entender sua sintaxe:

Explicação:

awk – É o programa awk que recebe o código da entrada padrão, normalmente de um arquivo.

padrão – É uma expressão que determina em quais registros a ação será executada. Se você omitir o padrão, a ação será executada para todas as linhas.

{ação} – É o código que será executado quando o padrão corresponder, ou seja, o que será feito com os dados que correspondem ao padrão. As chaves “{}” delimita o bloco da ação.

arquivo – É o arquivo que contém os dados que o comando awk vai ler e processar.

Para um melhor entendimento, veja o exemplo:

O comando awk lê uma linha do arquivo (notas.txt) por vez (cada linha é um registro), verifica se o “$2” (segundo campo) é maior ou igual a “7”, se a condição for verdadeira (corresponder), executa “print $1” (ação), imprimindo o primeiro campo.

A tabela a seguir contém opções importantes utilizadas pelo comando awk para uma consulta rápida:

OpçãoDescriçãoExemplos de uso
-FDefine o separador de campos.awk -F”=” ‘{print $1}’ /etc/os-release
-fLê o código do programa awk a partir de um arquivo.awk -f app.awk auth.log
-vDefine uma variável antes da execução.awk -v limit=80 ‘$5+0 >= limit {print}’ dados.txt
-hExibe na tela um sumário com uma lista de opções do comando awk para ajuda.awk -h

Agora que você já sabe para que serve o comando awk e conhece algumas das suas opções, é hora de aprender mais, praticando com exemplos práticos de uso explicados em detalhes.

Exibir campos de um arquivo

No comando awk, o separador de campo padrão (representado pela variável FS) é qualquer sequência de espaços em branco (espaços ou tabulações).

Por exemplo, para exibir somente o primeiro campo do arquivo “/etc/hosts” com o awk, execute:

O “print” entre chaves é um comando para imprimir “$1” que é uma variável que representa o primeiro campo (lista de IPs) do arquivo (separado por espaços).

Para mostrar os campos “1” e “2” use as variáveis “$1” e “$2” na ação, veja o exemplo:

O caractere vírgula seguido do espaço é usado para separar os campos, no exemplo, um ($1) e dois ($2).

Mas nem todo arquivo ou fluxo de texto tem seus campos separados por espaço, não é mesmo ? pode ter outros caracteres como separador, nesse caso você pode utilizar a opção “-F” para utilizar um separador de campo diferente.

Por exemplo, o comando a seguir procura pela palavra “postfix” no arquivo “/etc/passwd”, caso encontre, executa a ação exibindo na tela a saída formatada com informações (uma em cada linha) do usuário.

O comando print exibe a seguinte formatação: “USER:” seguido do campo um ($1), na linha abaixo, “HOME:” em seguida campo seis ($6) e na última linha “SHELL:” seguido do campo sete ($7).

É usado o caractere “,” (vírgula) para separar cada string do campo e o código “\n” após os campos insere uma quebra de linha, para a próxima string ser inclusa na linha abaixo junto com o valor do campo.

Mostrar campos de um arquivo do tipo “.csv”

Com o comando awk também é possível visualizar e filtrar os campos de um arquivo “.csv”, por exemplo, para exibir o conteúdo do arquivo “cadastro.csv” execute no terminal:

O conteúdo do arquivo deve ser exibido na tela, mas caso queira filtrar pelos campos um e três, execute:

A opção “-F” foi usada para usar a “,” (vírgula) como delimitador de campo, “NR” significa Number of Records, nesse caso, “NR > 1” corresponde ao padrão (condição), que é qualquer linha após a linha “1”, e a ação é exibir na tela as colunas 1 ($1) e 3 ($3).

Você pode utilizar o comando awk para filtrar conteúdos de arquivos “.csv” junto com o comando xargs ou outros comandos para automatizar tarefas.

Utilizar expressões regulares no pesquisa

O comando awk também pode fazer uso de expressões regulares no padrão para pesquisar em arquivos ou fluxo de dados.

Por exemplo, para ignorar comentários e linhas vazias do arquivo “site1.conf” e mostrar somente o código, execute o comando:

Na prática, o awk linux acessa o conteúdo do arquivo linha por linha e executa a ação “print” para os padrões “$1 !~ /^#/” descartando linhas cuja primeira palavra começa com o caractere “#” e “NF > 0” que descarta linha sem campos (linhas em branco).

Que tal utilizar o awk para encontrar erros de log, que tenha a palavra “ERROR” ou “FATAL” no arquivo “/var/log/syslog” do linux ? Veja como fazer:

Na prática “/ERROR|FATAL/” é o padrão de busca escrito entre “/ /” e o caractere “|” (PIPE) significa alternância, equivale a um “OU” lógico em expressões regulares.

O código “{print NR “:” S0}” imprime o número da linha (NR) seguido do caractere “:” (dois pontos) e o conteúdo completo do log. É uma forma de mostrar em que linha esta localizado o registro.

Identificar sistemas de arquivos com uso elevado

Você pode utilizar o comando awk para filtrar e mostrar somente os sistemas de arquivos que estejam com 80% ou mais do espaço total ocupado, veja como:

O comando awk recebe a saída do comando “df -hP”, e filtra utilizando o padrão “ NR == 1 || $5+0 >= 80”, que faz o seguinte: “Se for a primeira linha OU (||) se o percentual de utilização for maior ou igual a 80, selecione a linha”.

Para cada linha que corresponda ao padrão vai ser exibido na tela o primeiro campo ($1) que é o sistema de arquivos, o quinto campo ($5) que mostra o percentual de ocupação usado e o sexto campo ($6) que o ponto de montagem usado.

Criar e executar script awk

É possível também automatizar tarefas repetitivas com o awk através de scripts, você pode criar um script e o código é executado pelo comando awk que recebe como argumento um arquivo.

Suponha que na linha de comando você precise com frequência filtrar erros nos logs, e mostrar na saída a quantidade de erros e as linhas com os respectivos registros, você pode criar o arquivo do script:

E adicionar o código a seguir:

Esse código em AWK serve para procurar linhas que contenham a palavra “ERROR” em um arquivo ou fluxo de texto, armazenar todas essas linhas, contar quantas foram encontradas e, ao final, exibir a quantidade total e a lista dos erros.

O código do script possui três partes principais:

“BEGIN”: Executado uma única vez antes de começar a leitura dos dados, declarando as variáveis “total” e “IGNORECASE”.

“/ERROR/”: Seleciona as linhas que contêm o padrão “ERROR” ignorando o case-senstive (variável IGNORECASE = 1).

O código “erros[total] = $0” significa:

“erros”: É um array usado para armazenar as linhas encontradas.

“total”: Indica a posição que será utilizada para armazenar a próxima linha.

“$0”: Representa a linha inteira que o AWK está processando naquele momento.

Já o código “total++” incrementa o contador em uma unidade, ou seja, a cada erro encontrado no log acrescenta mais 1 no contador.

“END”: Executa depois que todas as linhas foram processadas. Nesse momento o script já sabe quantas linhas foram encontradas e já armazenou todas elas.

Assim, o código “print “Total de erros:”, total” mostra na tela o texto seguido do valor armazenado em “total”.

Já o código “print “Lista de erros encontrados:\n”” imprime o título da lista e “\n” representa uma quebra de linha, deixando uma linha em branco após o título.

E o código final:

É um laço de repetição que percorre o array “erros” e imprime todas as linhas armazenadas, funcionando assim:

“i = 0” – começa pelo primeiro índice.

“i < total” – continua enquanto “i” for menor que a quantidade de linhas encontradas.

“i++” – incrementa o índice em uma unidade a cada repetição.

“print erros[i]” – exibe a linha armazenada naquela posição.

Para executar o script, utilize a opção “-f” do awk seguido do script e no final a localização do arquivo:

Para conhecer outras funções, recursos de programação e opções avançadas do comando awk, consulte o manual online oficial do GNU Awk.

Conclusão

Durante o guia você aprendeu que o comando awk é extremamente útil quando você precisa: pesquisar, filtrar e formatar informações com poucos comandos, podendo ajuda-lo até a analisar logs do sistema.

Para os iniciantes, a dica é começar com a extração de campos e os filtros simples, para somente depois usar cálculos e scripts reutilizáveis.

Tem dúvidas, sugestões ou dicas úteis sobre o comando awk ? Deixe seu comentário com dúvidas, sugestões ou elogios!

Perguntas Frequentes (FAQ) sobre o comando awk

Qual é a diferença entre o comando awk e gawk ?

O comando awk é o nome tradicional do comando e da linguagem. Já o gawk é a implementação mantida pelo projeto GNU, com recursos adicionais e compatibilidade com os recursos existentes do awk.

Qual a diferença principal entre os comandos awk, sed e grep ?

O comando grep pesquisa linhas que correspondem a um padrão, já o sed edita e transforma textos, como substituir ou remover trechos.

E o comando awk processa dados por linhas e campos, permitindo filtrar, calcular e formatar resultados, e tem recursos, como: criação de variáveis, loops e decisões condicionais.

O que representa a variável $0 no awk ?

A variável “$0” representa a linha inteira que está sendo processada no momento.

É possível realizar somas ou cálculos utilizando o awk ?

Sim, o awk possui suporte nativo a operações aritméticas aplicadas diretamente sobre os campos numéricos.

Para que servem os blocos BEGIN e END do comando awk ?

O bloco BEGIN executa instruções antes de ler o arquivo, e o END executa ações após o término da leitura completa.

Navegue por tópicos:

Foto de Edson Oliveira
Edson Oliveira

Especialista em Linux, trabalhando com TI tem experiência no gerenciamento, solução de problemas e suporte de servidores linux em ambientes corporativos.

Professor de cursos voltados a linux, tecnologias open source e certificações LPI. Possui as certificações LPIC-1, LPIC-2 e LPIC-3 (Mixed Environment).

Navegue por tópicos:

Você também pode gostar:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Valorizamos sua privacidade

Utilizamos cookies para aprimorar sua experiência de navegação, exibir anúncios ou conteúdo personalizado e analisar nosso tráfego. Ao clicar no botão “Aceitar todos”, você concorda com nosso uso de cookies.

Para mais informações leia nossa Política de Privacidade.