Skip to content

Latest commit

 

History

History
125 lines (92 loc) · 3.21 KB

File metadata and controls

125 lines (92 loc) · 3.21 KB

awk

Variáveis internas (built-in):

Variável Significado
$0 Linha inteira atual sendo processada
$1, $2 Campos (colunas) da linha atual. $1 é o primeiro campo, $2 o segundo, etc
NF Número de campos (Number of Fields) na linha atual. Útil para saber quantas colunas a linha tem
NR Número do registro (Number of Records) — ou seja, o número da linha atual (começa em 1)
FS Separador de campos de entrada (Field Separator). Define como o awk divide a linha em campos. Padrão: espaço em branco
OFS Separador de campos de saída (Output Field Separator). Usado ao imprimir campos com vírgula (ex: print $1, $2). Padrão: um espaço
RS Separador de registros de entrada (Record Separator). Define o que separa as linhas. Padrão: \n (quebra de linha)
ORS Separador de registros de saída (Output Record Separator). Usado ao imprimir com print. Padrão: \n
FILENAME Nome do arquivo atual sendo processado
FNR Igual ao NR, mas reinicia a contagem a cada novo arquivo (útil com múltiplos arquivos)

Exemplos:

# Exibir o número da linha e a linha completa
awk '{ print "Linha " NR ": " $0 }' arquivo.txt

# Exibir apenas o último campo de cada linha
awk '{ print "Último campo: " $NF }' dados.txt

# Usar vírgula como separador de entrada (CSV)
awk -F',' '{ print "Nome: " $1 ", Idade: " $2 }' pessoas.csv

# Mudar o separador de saída para " | "
awk 'BEGIN { OFS = " | " } { print $1, $2, $3 }' dados.txt

Remove linhas em branco:

awk '!/^$/ {print}' file

Field separator:

awk '!/^$/ {print}' file
awk NF':' file.txt
awk 'BEGIN{FS=","}

Imprimi total de linhas:

awk '{NF}' file

Imprimi a linha inteira:

awk '/\<span./ {print $0}'

Lista todos os arquivos recursivamente de um diretório:

ls -R | awk '!/:$/ && !/^$/ {print $NF}'

Faz pesquisa e altera campo:

awk -v find="${1,,}" '{line=tolower($0); if(line ~ find) print}' file
awk -v find="${1,,}" '{line=tolower($0); if(index(line, find)) print}' file
awk -v find="${1,,}" '{line=tolower($0); if(match(line, find)) print}' file

# Substitui valor
awk '/wp-manga-chapter-img">$/ {gsub(/<img.+src=\"/, "", $0); print $0}' site.url

Linha que começa com erro e termina com horário:

awk '/^erro/ && /[0-9]{2}:[0-9]{2}$/ {print $0}'

Ignora linha iniciada com [Música]:

awk '/^Música]/ { next }'

Coleta primeiro campo do padrão -->:

awk '/-->/ {
  split($0, parts, " --> ")
  start_time = start[1]
  next
}'

Coleta valor de url de uma linha json:

awk '/"url":/ {
  url = gensub(/."url": "(.)",?/, "\\1", "g")
  print url
}' data.json

Recebe valor da tag A e seu conteúdo:

# Links
/DT><A / {
  title= gensub(/^[ \t]*<DT><A HREF=".+>([^<]+).*$/, "\\1", "g")
  link = gensub(/^.*<DT><A HREF="([^"]+)".*$/, "\\1", "g")
  print "- [" title "] " "(" link ")"
}

Coleta valors de campos json:

readarray -t sites < <(awk -F'"' '/": \{/ {print $2}' data.json)
readarray -t urls < <(awk -F'"' '/"url":/ {print $4}' data.json)