Básico
Executando AWK
awk '{ print }' file.txt # print every line awk '{ print $1 }' file.txt # print first field awk -F: '{ print $1 }' /etc/passwd # custom delimiter awk -f script.awk file.txt # run from file cmd | awk '{ print $2 }' # pipe input
Estrutura do Programa
awk 'pattern { action }'Forma básica — ação executa quando padrão coincide
BEGIN { ... }Executa uma vez antes de processar a entrada
END { ... }Executa uma vez após toda a entrada ser processada
Sem padrãoAção executa para cada linha
Sem açãoAção padrão é { print }
Padrões & Ações
Tipos de Padrão
awk '/error/' file.txt # regex match awk '$3 > 100' file.txt # comparison awk 'NR >= 5 && NR <= 10' file.txt # line range awk '/start/,/end/' file.txt # range pattern
Referência de Padrões
/regex/Comparar linha com regex
$1 ~ /pat/Campo coincide com regex
$1 !~ /pat/Campo não coincide com regex
expr1, expr2Intervalo: do primeiro ao segundo match
expr1 && expr2E lógico
expr1 || expr2OU lógico
!exprNÃO lógico
Variáveis
Variáveis Built-in
NRNúmero do registro (linha) atual
NFNúmero de campos no registro atual
FSSeparador de campo de entrada (padrão: espaço)
OFSSeparador de campo de saída (padrão: espaço)
RSSeparador de registro de entrada (padrão: newline)
ORSSeparador de registro de saída (padrão: newline)
FILENAMENome do arquivo de entrada atual
FNRNúmero do registro no arquivo atual
Variáveis de Usuário
awk '{ total += $1 } END { print total }' file.txt awk -v threshold=50 '$1 > threshold' file.txt awk 'BEGIN { count = 0 } /pat/ { count++ } END { print count }' file.txt
Campos
Acesso a Campos
$0Linha inteira atual
$1, $2, ...Primeiro, segundo, ... campo
$NFÚltimo campo
$(NF-1)Penúltimo campo
Separadores de Campo
awk -F, '{ print $2 }' data.csv # comma awk -F'\t' '{ print $1 }' data.tsv # tab awk 'BEGIN { FS = "[,:]" } { print $1 }' f # multi-char awk 'BEGIN { OFS = "," } { print $1, $3 }' f # output sep
Controle de Fluxo
Condicionais & Laços
awk '{ if ($1 > 50) print "high"; else print "low" }' f awk '{ for (i = 1; i <= NF; i++) print $i }' f awk '{ i = 1; while (i <= NF) { print $i; i++ } }' f awk '/skip/ { next } { print }' f # skip matching lines
Comandos de Controle
if (cond) { ... } else { ... }Condicional
for (i = 0; i < n; i++) { ... }Laço for estilo C
for (key in array) { ... }Iterar chaves de array
while (cond) { ... }Laço while
do { ... } while (cond)Laço do-while
nextPular para próximo registro de entrada
exitParar processamento, executar bloco END
Funções
Funções Definidas pelo Usuário
awk 'function max(a, b) { return (a > b) ? a : b } { print max($1, $2) }' file.txt
Funções Numéricas
int(x)Truncar para inteiro
sqrt(x)Raiz quadrada
sin(x), cos(x)Funções trigonométricas
log(x), exp(x)Logaritmo natural e exponencial
rand()Float aleatório entre 0 e 1
srand(seed)Inicializar gerador de números aleatórios
Arrays
Arrays Associativos
awk '{ count[$1]++ } END { for (k in count) print k, count[k] }' f awk '{ arr[NR] = $0 } END { for (i = NR; i >= 1; i--) print arr[i] }' f
Operações com Arrays
arr[key] = valDefinir elemento
arr[key]Obter elemento (auto-cria no acesso)
key in arrTestar se chave existe
delete arr[key]Deletar elemento único
delete arrDeletar array inteiro
for (k in arr)Iterar sobre chaves (sem ordem)
length(arr)Número de elementos (gawk)
Funções de String
Referência de Strings
length(s)Comprimento da string
substr(s, start, len)Substring (índice base 1)
index(s, target)Posição de target em s (0 se não encontrar)
split(s, arr, sep)Dividir string em array
sub(pat, repl, s)Substituir primeira ocorrência
gsub(pat, repl, s)Substituir todas as ocorrências
match(s, pat)Posição do match regex (define RSTART, RLENGTH)
tolower(s) / toupper(s)Conversão de caso
sprintf(fmt, ...)Formatar string (como printf do C)
Exemplos de String
awk '{ gsub(/old/, "new"); print }' f # sed-like replace awk '{ print toupper($0) }' f # uppercase all awk '{ print substr($0, 1, 40) }' f # truncate to 40
I/O
Saída
awk '{ print $1, $2 }' f # space-separated awk '{ printf "%s,%d\n", $1, $2 }' f # formatted output awk '{ print $1 > "out.txt" }' f # redirect to file awk '{ print $1 >> "out.txt" }' f # append to file
Referência de I/O
printImprimir com ORS (newline por padrão)
printf fmt, ...Impressão formatada (sem newline)
print > fileRedirecionar saída para arquivo
print >> fileAcrescentar saída ao arquivo
print | cmdEnviar saída por pipe para comando
getline < fileLer uma linha do arquivo
cmd | getline varLer saída de comando para variável
close(file)Fechar arquivo ou pipe
Padrões Comuns
One-Liners
awk '{ sum += $1 } END { print sum }' f # sum column awk 'END { print NR }' f # count lines awk '!seen[$0]++' f # remove dupes awk 'NF' f # remove blanks awk '{ print NF }' f # fields per line
Receitas
CSV para TSVawk -F, 'BEGIN{OFS="\t"} {$1=$1; print}'
Somar coluna 2awk '{ s += $2 } END { print s }'
Primeiras N linhasawk 'NR <= 10' (como head)
Contagem de frequênciaawk '{ c[$1]++ } END { for (k in c) print k, c[k] }'
Entre marcadoresawk '/BEGIN/,/END/'
Imprimir n-ésimo campoawk '{ print $N }' (substituir N)