Performance awk x grep

Publicado por DAVISON MARCEL PASQUALINI em 21/05/2009

[ Hits: 13.079 ]

 


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

diff - Comando com exemplos

Como excluir um determinado kernel no Ubuntu

Desligamento automático para conexão discada

Pacman colorido no Arch Linux

Verificar se site está online via linha de comando

  

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