Introdução ao awk

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

[ Hits: 6.032 ]

Blog: https://mestrefabio.com

 


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

Site de depuração e aprendizado de expressões regulares

Como navegar sem cache no Chrome e Firefox

Segredos do comando sleep

Como instalar o PHP5 no Debian 9 Stretch

Ouvindo rádios online com o mpg123

Leitura recomendada

Como remover parêntesis dos nomes de arquivos

Executando comandos em looping no shell

Como fazer "quit" no SED

Bloqueando tráfego via MAC com iptables

Expressão regular para validar um IP

  

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