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.
[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:
[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.