Comandos Linux e habilidades de shell
awk: Quando as colunas se tornam programas
awk é o que você busca quando as colunas se tornam a unidade de trabalho: logs de acesso nginx, /etc/passwd, saída df, qualquer coisa que resida em campos. É uma linguagem completa (variáveis, matrizes, aritmética, regras de ação de padrão) com roupas de uma linha, que é exatamente o disfarce certo para análise forense de log. O limite honesto: qualquer coisa que o awk faça confortavelmente é uma linha única, e qualquer coisa que precise de uma página de blocos é um script Python que ainda não se admitiu.
Pontos principais
- A divisão de campo é o truque principal: awk -F: '$3 >= 1000 {print $1}' /etc/passwd lista os usuários reais, e -F'[,|]' lida com delimitadores de vários caracteres quando o corte já foi encerrado.
- Contagem com matrizes associativas: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure transforma qualquer log em uma tabela de frequência em uma linha.
- NR e NF respondem às perguntas do arquivo: 'NR == 1' é a linha do cabeçalho, '{print NF}' conta colunas por linha e comparar NR com os valores salvos de outro arquivo encontra duplicatas e lacunas.
- Match plus extract é o pão de cada dia: awk '/ 500 / {print $7, $9}' access.log extrai páginas de erro com URLs e OFS permite reimprimir $0 após editar um único campo sem reescrever a linha você mesmo.
- Os blocos BEGIN e END são onde reside o trabalho agregado: BEGIN define separadores, as regras intermediárias são executadas por linha, END imprime totais; três blocos são bons, cinco é um roteiro disfarçado.
- A citação é o verdadeiro inimigo das linhas simples do shell: coloque aspas simples no programa, coloque aspas duplas literais dentro dele e lembre-se de que $7 dentro de uma string de shell com aspas duplas nunca chega a awk.
- O trabalho numérico obtém LC_ALL = C: vírgulas de localidade em números e agrupamentos ímpares viram comparações e classificações de lado, e fixar a localidade é uma linha que salva uma tarde.
- Conheça o teto: vírgulas entre aspas dentro de CSV, JSON aninhado ou formatos multilinha com estado vão para Python; awk é um bisturi e continua sendo um.
Nota de campo
Uma linha única que somava colunas de dólares de um registro com vírgulas de localidade produziu números que ninguém questionou até que a contabilidade abriu o relatório. LC_ALL=C mudou-se para nossa biblioteca de alias naquela semana e permaneceu.
Perguntas frequentes
awk ou cut para trabalho em coluna?
corte para um separador fixo e uma lista de colunas simples; awk no momento em que as condições, regex, aritmética ou agregados aparecem, ponto em que o corte está fora de sua profundidade de qualquer maneira.
Como somar ou calcular a média de uma coluna?
Agregado em END: awk '{s += $5} END {print s, s/NR}' adiciona e calcula a média do campo cinco entre linhas; remova os separadores de milhares primeiro se uma localidade colocar vírgulas nos números.
Por que meu one-liner awk se comporta de maneira diferente no macOS?
O macOS fornece um awk POSIX sem extensões GNU como -i inplace ou gensub; scripts executados no Linux podem falhar silenciosamente, portanto, mantenha o formato POSIX de uma linha ou leve o gawk com você.
O awk pode analisar JSON?
Não é significativo: JSON não tem estrutura de coluna que o awk entende e hacks de regex quebram em objetos aninhados. Use jq, que é o formato do awk para JSON, ou o módulo json do Python quando o trabalho crescer.
Como a Kinetikatech ajuda com comandos linux e habilidades de shell
Vamos direto ao ponto: Os comandos e hábitos de script que decidem se um administrador opera um servidor ou o combate: pesquise, transforme, transfira e supervisione textos e processos com as ferramentas presentes em cada instalação básica. Entregue ao nosso serviço Segurança de servidores Linux e Gestão de servidores e está resolvido: avaliado com rigor, implementado com capricho, monitorado dia e noite.