Introdução ao awk

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

[ Hits: 6.073 ]

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 suprimir a emissão de luz azul da tela via linha de comando

Como criar pendrive USB do Windows 10 bootável usando Linux

Otimizando Digitação no Terminal Bash

Mapeando teclas de modo visual no VIM

Utilizando o ffmpeg para cortar vídeos

Leitura recomendada

Remover tags HTML com SED

Screen (janelas) no modo shell?

SED - substituir apenas a ocorrência N de uma string

Busca por string dentro dos arquivos

Obtendo a cotação do Bitcoin com SED

  

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