Introdução ao awk

Publicado por Fábio Berbert de Paula em 28/07/2020

[ Hits: 6.058 ]

Blog: https://fabio.automatizando.dev

 


Introdução ao awk



O awk funciona de forma similar ao grep e sed, provendo recursos de filtragem sobre texto. Sua diferença é que ele provê recursos adicionais de tratamento de resultado que nos permite a criação de filtros um pouco mais sofisticados que as ferramentas supracitadas.

Então quando usar grep, sed ou awk?
  • grep é indicado para filtros simples;
  • sed indicado para substituição;
  • awk indicado para filtros mais sofisticados.

Se for pensar em desempenho, dê sempre a preferência para o grep, depois sed e por fim awk.

Essa é a primeira dica de uma série que publicarei sobre awk, espero que gostem!

O awk pode receber entrada do STDIN (input do terminal) ou ler um arquivo. Por exemplo, quero filtrar todas as linhas que contenham "fabio" no arquivo /etc/passwd:

cat /etc/passwd | awk '/fabio/'
fabio:x:1000:1000:fabio,,,:/home/fabio:/bin/bash

Agora quero filtrar todas as linhas que NÃO contenham "fabio" em /etc/passwd (usei a negação "!"):

awk '!/fabio/' /etc/passwd

Sempre que o awk filtra alguma expressão, ela é armazenada na variável $0. Sendo assim o primeiro exemplo:

cat /etc/passwd | awk '/fabio/'

É similar a:

cat /etc/passwd | awk '/fabio/{print $0}'

Já vá se acostumando ao par de chaves, é ali dentro que a mágica do awk acontece!

Substituição

Para finalizar a dica, vamos ver como fazer substituição básica com awk. Quero substituir "1000" por "1001" na linha do usuário "fabio". Usaremos o comando "sub":

awk '/fabio/{ sub(/1000/,"1001"); print $0 }' /etc/passwd

Eu também poderia ter executado a substituição em todo o arquivo com a seguinte sintaxe:

awk '{ sub(/1000/,"1001"); print $0 }' /etc/passwd

O comando "sub" irá executar a substituição somente na PRIMEIRA OCORRÊNCIA. Para substituir todas as ocorrências, use o gsub:

awk '{ gsub(/1000/,"1001"); print $0 }' /etc/passwd
fabio:x:1001:1001:fabio,,,:/home/fabio:/bin/bash

Até a próxima!

Outras dicas deste autor

Como reproduzir vídeos no Chromecast usando o VLC

Contagem regressiva no terminal

Nginx - Como redirecionar seu domínio para o www

Docker: container Debian sem o comando "ps" (bash: ps: command not found) [Resolvido]

Erro: "Possible missing firmware... for module r8169" [Resolvido]

Leitura recomendada

Como remover parêntesis dos nomes de arquivos

Equação de 2° Grau Shell Script - Zenity

Listar comandos mais utilizados (via histórico de shell)

Expressão regular para validar um IP

Informações completas sobre os arquivos numa pasta

  

Comentários
[1] Comentário enviado por maurixnovatrento em 28/07/2020 - 23:32h


Legal. É uma alternativa. Mas como tô treinado no sed, vai ser difícil trocar. Não tem o que eu não consigo fazer com ele.

___________________________________
Conhecimento não se Leva para o Túmulo.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts