Introdução ao awk

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

[ Hits: 478 ]

Blog: https://youtube.com/c/cotidianohackeado

 


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 instalar o PHP5 no Debian 9 Stretch

Python - locale.Error: unsupported locale setting [Resolvido]

Como evitar que o CSS do teu site fique armazenado em cache

Como atualizar o navegador padrão no Debian

Graduação em TI via EAD - Curso gratuito de 600h pela CECIERJ

Leitura recomendada

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

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

Extraindo seu endereço IP com shell script (egrep + awk)

SED - texto para maiúsculas, minúsculas, pascal case e camel case

Como remover parêntesis dos nomes de arquivos

  

Comentários
[1] Comentário enviado por mauricio123 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