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.
- Saber utilizar a linha de comando do linux.
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:
apt update # executar com root
apt install gawk -y # executar com rootEm distribuições como Red Hat, AlmaLinux ou Rocky Linux, a instalação é realizada via dnf:
dnf install gawk -y # execute com o usuário rootComo executar o comando awk ?
O comando awk é executado na linha de comando, mas primeiro é preciso entender sua sintaxe:
awk 'padrão {ação}' arquivoExplicaçã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:
awk '$2 >= 7 { print $1 }' notas.txtO 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ção | Descrição | Exemplos de uso |
|---|---|---|
| -F | Define o separador de campos. | awk -F”=” ‘{print $1}’ /etc/os-release |
| -f | Lê o código do programa awk a partir de um arquivo. | awk -f app.awk auth.log |
| -v | Define uma variável antes da execução. | awk -v limit=80 ‘$5+0 >= limit {print}’ dados.txt |
| -h | Exibe 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:
awk '{print $1}' /etc/hosts
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:
awk '{print $1, $2}' /etc/hostsO 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.
awk -F: ' /postfix/ {print "USER:", $1 "\n" "HOME:", $6 "\n" "SHELL:", $7}' /etc/passwd
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:
awk '{print}' cadastro.csvO conteúdo do arquivo deve ser exibido na tela, mas caso queira filtrar pelos campos um e três, execute:
awk -F"," 'NR > 1 {print $1, $3}' cadastro.csv
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:
awk '$1 !~ /^#/ && NF > 0 {print}' site1.confNa 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:
awk '/ERROR|FATAL/ {print NR ":" $0}' /var/log/syslog
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:
df -hP | awk 'NR == 1 || $5+0 >= 80 {print $1, $5, $6}'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:
nano error.awkE adicionar o código a seguir:
BEGIN {
IGNORECASE = 1
total = 0
}
/ERROR/ {
erros[total] = $0
total++
}
END {
print "Total de erros:", total
print "Lista de erros encontrados:\n"
for (i = 0; i < total; i++) {
print erros[i]
}
}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:
for (i = 0; i < total; i++) {
print erros[i]
}É 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:
awk -f error.awk /var/log/kern.log
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.

