Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Awk - Uma poderosa ferramenta de análise
Linux user
Publicado por Leonardo Berbert Gomes em 01/07/2009

Login: leoberbert, 1107058 pontos | Blog: http://www.orga-systems.com
[ Hits: 7967 ]

Awk - Uma poderosa ferramenta de análise

A linguagem awk é muito conhecida por sua eficácia em criar filtros de conteúdos de arquivos. Nessa dica vou ensinar alguns truques que facilitarão a vida de todos.

Vamos tomar como base o arquivo leo.txt, que tem o seguinte conteúdo:

188 :2106102121 192.168.0.89
267 :2206211021 192.168.0.88
438 :2306211021 192.168.0.87

1. Preciso mostrar na tela a primeira coluna do arquivo:

$ cat leo.txt | awk '{print $1}'
188
267
438

Entendendo:
  • print $1 -> Exibe a primeira coluna;
  • print $2 -> Exibe a segunda coluna e assim por diante;
  • print $NF ->Exibe a última coluna.

2. Em seguida me foi solicitado que contasse as linhas do resultado acima, para isso podemos utilizar outro comando após o resultado:

$ cat leo.txt | '{print $1}' | wc -l

3. Suponha que eu necessite vasculhar esse arquivo e mostrar apenas os campo com dia e mês, repare que na frente do dia existe um ":" que nos atrapalharia um pouco nessa busca. Vou usar o comando cat para mostrar que o awk pode ser combinado com os comandos do shell:

  • $ cat leo.txt | awk -F ":" '{print substr($2,1,4)}'
  • 2106
  • 2206 2306

    Entendendo:
    • awk -F ":" -> Ignora o caractere ":" da segunda coluna;
    • {print substr($2,1,4)}' -> Exibe a segunda coluna do primeiro ao quarto caractere.

    4. Agora eu gostaria que, após mostrar esse resultado, ele fizesse um filtro por uma data específica, vou tomar como seleção "2106":

    $ cat leo.txt | awk -F ":" '{print substr($2,1,4)}' | grep 2106
    2106

    5. Vamos dificultar um pouco as coisas agora. Eu agora tenho um outro arquivo (leo2.txt) com o seguinte conteúdo:

    183201
    183202
    183203
    183204
    183205
    183206
    183207
    183208
    183209

    6. Me foi solicitado que fizesse um filtro para descobrir todos os campos de 18:32:02 até 18:32:08. Observe que aqui estaremos trabalhando com um intervalo. Então ficaria da seguinte forma:

    $ cat leo2.txt | awk '{if (($1) >= "183202" && ($1) <= "183208") print}'
    183202
    183203
    183204
    183205
    183206
    183207
    183208

    Obs.: Neste último exemplo temos uma condição que deve ser atendida, se verdadeira, exibe o resultado encontrado.

    Pessoal, espero ter ajudado. Em breve darei continuidade à dica com mais truques de Awk.


  • Outras dicas deste autor

    Leitura recomendada
       Dica Linux recomendada Juntando arquivos de vídeos com o comando CAT
       Dica Linux recomendada Como matar (fechar) um programa por meio de ssh, em uma outra máquina
       Dica Linux recomendada fuser - Descobrindo o processo que uma determinada porta está utilizando
       Dica Linux recomendada Expressão regular com o Wget
       Dica Linux recomendada Facilitando as permissões no Linux com uso de ACLs

    Comentários
    [1] Comentário enviado por silver_bit em 10/07/2009 - 11:26h:

    Muito fera este awk apesar de ser desconhecido por muitos linuxers

    [2] Comentário enviado por diegrocha em 27/02/2010 - 17:57h:

    Gostei da dica. muito boa mesmo!

    abçs

    [3] Comentário enviado por removido em 25/10/2010 - 16:22h:

    Otima dica.

    [4] Comentário enviado por chimico em 31/03/2012 - 11:54h:

    Muito boa dica
    Favoritado!


    Contribuir com comentário


      
    Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
    Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
    Site hospedado por:

    Viva o Linux

    A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.