Performance awk x grep

Publicado por DAVISON MARCEL PASQUALINI em 21/05/2009

[ Hits: 12.794 ]

 


Performance awk x grep



Utilizava o comando grep em alguns scripts para selecionar algumas linhas dentro de um arquivo e depois o awk para formatar a apresentação.

Em discussão com um colega mais experiente, este me orientou a utilizar diretamente o awk para selecionar e formatar, pois o | (pipe) força a execução de dois comandos, o que torna o script menos performático.

Me pareceu bem lógico, mas fui testar... e quem diria, o teste indicou que é melhor utilizar os dois comandos, pois aparentemente o grep é mais "leve" que o awk, com isso ao fazer um filtro prévio com o grep o awk trata bem menos informação, o que dá vantagem para esta combinação.

O teste foi realizado utilizando a busca em um arquivo de 9,6G e os resultados foram que o combinado grep | awk consumiu 60% menos CPU e foi 20% mais rápido.

Claro que isso vai depender de quanto o grep vai filtrar, quanto mais melhor.

Vivendo e aprendendo...

Outras dicas deste autor

Variáveis compostas em shell script

Transposição COLUNA x LINHA

Leitura recomendada

Três formas de executar HTTP Request em Shell Script

Scpript para limpar os logs

Resolvendo problema com scripts que estão rodando no crontab

Apagar linhas comentadas de arquivos

Variáveis em bash

  

Comentários
[1] Comentário enviado por demoncyber em 21/05/2009 - 13:43h

Cara de boa bem interessante :D vou perpetuar esta informação, bom eu sempre uso grep | sed. Será que o.o tem vatagem usar os dois juntos também ?

Att

[2] Comentário enviado por /bin/laden em 22/05/2009 - 03:10h

Aproveitando o pipe... Outra coisa muito comum de se ver é o uso do pipe assim:

cat arquivo | grep 'string'

Isso é totalmente desnecessário, já que o grep (e o awk, sed, etc...) por padrão sempre esperam que a entrada seja um arquivo. Logo a linha acime poderia (e deveria!) ser escrita assim:

grep 'string' arquivo
ou
grep 'string' < arquivo

[3] Comentário enviado por L_A_E_R_T_E em 05/12/2009 - 01:37h

Algo que deve ser pensado antes é se realmente é necessario o uso do awk, temos varios comandos que podem fazer o que estamos tentando com awk. Eu estou falando isso por ser pego varias vezes usando awk sendo que poderia resolver facilmente com outro comando mas depois que comecei a ler o livro shell script profissional minha visão mudou bastante e em relaçã a aumentar a performance dos scripts posso dizer que é totalmente outra.

Um exemplo de um script que criei onde eu usava o awk para trasformar um arquivo que gerava numero linha após linha em um ao lado do outro.

awk '$1=$1' RS= OFS=" " ORS="" arq1 >> arq2

podendo substituir isso por somente

paste -sd , arq1 >> arq2

o ganho é grande e visualmente fica muito mais "legivel".


Pense se realmente você não pode utilizar outro comando ou ate mesmo uma combinação ao invez do awk, teste e se possivel relate novamente aqui se houve melhora.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts