Você sabia que o AWK faz isso? 6 dicas para iniciantes

Renato Ruis
Tim DevOps
Published in
3 min readMay 7, 2020

Hey \o

Hoje quero mostrar pra você algumas coisas que dá pra fazer com o AWK, como sempre de forma rápida, simples, objetiva e sem blá blá blá

Partes deste post foi retirada de um post em inglês do GeeksForGeeks que você pode ver ele completo aqui

Antes de mais nada, você precisa saber para o que você pode usar o AWK

  • Ler um arquivo linha por linha
  • Dividir cada linha em campos
  • Produzir relatórios formatados
  • Operações aritméticas e de string
  • Condicionais e loops
  • Muitas outras coisas você pode ver a documentação completa aqui ou aqui

Primeiro vamos criar um arquivo de exemplo. (Sim ele tem linhas vazias e duplicadas para os exemplos)

cat <<EOF > colaboradores.txt 
NOME CARGO PERMISSAO ID
Renato devops admin 25000
Ciclano gerente view 50000
Beltrano gerente admin 47000
Javalino desenvolvedor view 15000
Jenkao devops view 23000
Jenkao devops view 23000
Peagape desenvolvedor view 13000
JoaoBoss diretor admin 80000
JoaoBoss diretor admin 80000
EOF

Dica 1: Exiba as linhas que contenha um padrão ou uma palavra específica

Comando:awk '/devops/ {print}' colaboradores.txtSaída:
Renato devops admin 25000
Jenkao devops view 23000

Dica 2: Exiba apenas os campos desejados

Comando:awk '{print $1,$3}' colaboradores.txtSaída:
NOME PERMISSAO
Fulano admin
Renato admin
Ciclano view
Beltrano admin
Javalino view
Jenkao view
Peagape view
JoaoBoss admin

Váriáveis internas do AWK

As variáveis ​​internas do Awk incluem as variáveis ​​de campo $1, $2, $3 e assim por diante ($0 é a linha inteira) que dividem uma linha de texto em palavras ou partes individuais chamadas campos. temos algumas outras também que são: NR: Exibe o número da linha do arquivo NF: Mantém uma contagem do número de campos na linha atual. FS: Mostra o caractere separador de campo usado para dividir os campos na linha de entrada. (O padrão é “espaço em branco”). Existem muitas outras que não vem ao caso aqui, mas vale muito a pena conhecer.

Dica 3: Verificar se em uma coluna tem uma string específica (Parecido com a dica 1, porém mais expecífico)

Nesse exemplo como eu sei qual é cada coluna, quero saber quais são as linhas que tem a PERMISSAO admin, pois na dica um eu poderia ter a string "admin" em outras colunas.

Comando:awk '{ if($3 == "admin") print $0;}' colaboradores.txtSaída:
Renato devops admin 25000
Beltrano gerente admin 47000
JoaoBoss diretor admin 80000
JoaoBoss diretor admin 80000

Dica 4: Remove o cabeçalho do arquivo

Comando:awk 'NR>2' colaboradores.txtSaída:
Ciclano gerente view 50000
Beltrano gerente admin 47000
Javalino desenvolvedor view 15000
Jenkao devops view 23000
Jenkao devops view 23000
Peagape desenvolvedor view 13000
JoaoBoss diretor admin 80000
JoaoBoss diretor admin 80000

Dica 5: Remove linhas vazias

Comando:awk NF colaboradores.txtSaída:
NOME CARGO PERMISSAO ID
Renato devops admin 25000
Ciclano gerente view 50000
Beltrano gerente admin 47000
Javalino desenvolvedor view 15000
Jenkao devops view 23000
Jenkao devops view 23000
Peagape desenvolvedor view 13000
JoaoBoss diretor admin 80000
JoaoBoss diretor admin 80000

Dica 6: Remove linhas duplicadas

Comando:awk NF colaboradores.txt | uniqSaída:
NOME CARGO PERMISSAO ID
Renato devops admin 25000
Ciclano gerente view 50000
Beltrano gerente admin 47000
Javalino desenvolvedor view 15000
Jenkao devops view 23000
Peagape desenvolvedor view 13000
JoaoBoss diretor admin 80000

Dica extra: Essa é mais avançado, porém é pra te deixar com mais vontade de saber mais sobre o AWK essa ferramenta incrível, olha só!

Comando:awk 'NF { printf "%-10s\t %-10s\t %-10s\t \n", $1, $2, $3, $3 }' colaboradores.txtSaída:
NOME CARGO PERMISSAO
Renato devops admin
Ciclano gerente view
Beltrano gerente admin
Javalino desenvolvedor view
Jenkao devops view
Jenkao devops view
Peagape desenvolvedor view
JoaoBoss diretor admin
JoaoBoss diretor admin

Ficou com alguma dúvida? Quer mais dicas como essa? Não gostou ou acha que tem algo que poderia melhorar? fale comigo :) aqui

Valew!

--

--