Para capturar um padrão específico awk
e grep
pode ser usado. Por que devemos usar um sobre o outro? Qual é mais rápido e por quê?
Se eu tivesse um arquivo de log e desejasse pegar um determinado padrão, poderia executar um dos seguintes
awk '/pattern/' /var/log/messages
ou
grep 'pattern' /var/log/messages
Eu não fiz nenhum benchmarking, então não saberia. Alguém pode elaborar isso? É ótimo conhecer o funcionamento interno dessas duas ferramentas.
linux
awk
grep
performance
holasz
fonte
fonte
time
tempo necessário para executar o comando. Ex:time ls -l
.Respostas:
O grep provavelmente será mais rápido:
awk é uma linguagem de programação interpretada, na qual grep é um programa de código c compilado (que é otimizado adicionalmente para encontrar padrões em arquivos).
(Observação - executei os dois comandos duas vezes para que o cache não distorçasse os resultados)
Mais detalhes sobre idiomas interpretados na wikipedia.
Como Stephane apontou corretamente nos comentários, sua milhagem pode variar devido à implementação do grep e awk que você usa, do sistema operacional em que está instalado e do conjunto de caracteres que você está processando.
fonte
Use a ferramenta mais específica e expressiva. A ferramenta que melhor se adapta ao seu caso de uso provavelmente será a mais rápida.
Como um guia aproximado:
fonte
perl
vez deawk
. se você precisa de algo mais complicado do que o grep / cortar / sed, então as chances são awk não será suficiente e você precisa de algo "full-blown"Ao pesquisar apenas por seqüências de caracteres e velocidade, você quase sempre deve usar
grep
. São ordens de magnitude mais rápidas do queawk
quando se trata apenas de pesquisas brutas.fonte As diferenças de funcionamento e desempenho de sed, awk e outras utilidades ao analisar Unix
fonte
awk ... has PCRE matching for regular expressions
que é completamente falso.Embora eu concorde que, em teoria,
grep
deve ser mais rápido do queawk
, na prática, o YMMV, pois isso depende muito da implementação que você usa.aqui comparando grep e awk do busybox 1.20.0, GNU grep 2.14, mawk 1.3.3, GNU awk 4.0.1 no Debian / Linux 7.0 amd64 (com glibc 2.17) em um local UTF-8 em um arquivo UTF-8 em um arquivo de 240 MB de 2,5 milhões de linhas de Caracteres somente ASCII.
No código C, apenas o GNU grep recebe um impulso significativo e se torna mais rápido que
mawk
.O conjunto de dados, o tipo de regexp também pode fazer uma grande diferença. Para regexps,
awk
deve ser comparado comgrep -E
comoawk
regexps 's são REs prolongados.Para esse conjunto de dados,
awk
pode ser mais rápido do quegrep
em sistemas baseados em busybox ou sistemas ondemawk
é o padrãoawk
e o código do idioma padrão é baseado em UTF-8 (IIRC, costumava ser o caso no Ubuntu).fonte
Em poucas palavras,
grep
faz uma coisa apenas como muitas outras ferramentas UNIX e combina uma linha com o padrão fornecido, e faz bem. Por outro lado,awk
é uma ferramenta mais sofisticada, pois é uma linguagem de programação completa definida pelo padrão POSIX com recursos típicos como variáveis, matrizes, expressões, funções ou instruções de controle para varredura e processamento de padrões.Na minha opinião, depende da implementação do desempenho de ambas as ferramentas em caso de correspondência de padrões e do tamanho de alguma entrada que você deseja processar. Eu esperaria que o grep seja geralmente mais eficiente que o awk, pois combina apenas. Mas você não pode escrever com grep um código simples para executar tarefas mais complexas, como processamento adicional de registros correspondentes, computação ou impressão de resultados sem usar outras ferramentas.
fonte