grep probablemente será más rápido:
# time awk '/USAGE/' imapd.log.1 | wc -l
73832
real 0m2.756s
user 0m2.740s
sys 0m0.020s
# time grep 'USAGE' imapd.log.1 | wc -l
73832
real 0m0.110s
user 0m0.100s
sys 0m0.030s
awk es un lenguaje de programación interpretado, mientras que grep es un programa de código C compilado (que además está optimizado para encontrar patrones en los archivos).
(Nota:ejecuté ambos comandos dos veces para que el almacenamiento en caché no sesgara los resultados)
Más detalles sobre idiomas interpretados en wikipedia.
Como Stephane ha señalado acertadamente en los comentarios, su millaje puede variar debido a la implementación de grep y awk que utiliza, el sistema operativo en el que se encuentra y el juego de caracteres que está procesando.
Utilice la herramienta más específica y expresiva. Es probable que la herramienta que mejor se adapte a su caso de uso sea la más rápida.
Como guía aproximada:
- ¿Está buscando líneas que coincidan con una subcadena o una expresión regular? Usa grep.
- seleccionando ciertas columnas de un archivo delimitado simplemente? Usar corte.
- realizar sustituciones basadas en patrones u... ¿otras cosas que sed puede hacer razonablemente? Usar sed.
- necesita alguna combinación de los 3 anteriores, o formato printf, o bucles y bifurcaciones de propósito general? Usa awk.
Cuando solo busca cadenas y la velocidad es importante, casi siempre debe usar grep
. Es órdenes de magnitud más rápido que awk
cuando se trata de búsquedas asquerosas.
fuente Las diferencias funcionales y de rendimiento de sed, awk y otras utilidades de análisis de Unix
UTILITY OPERATION TYPE EXECUTION TIME CHARACTERS PROCESSED PER SECOND
(10 ITERATIONS)
------- -------------- --------------- -------------------------------
grep search only 41 sec. 489.3 million
sed search & replace 4 min. 4 sec. 82.1 million
awk search & replace 4 min. 46 sec. 69.8 million
Python search & replace 4 min. 50 sec. 69.0 million
PHP search & replace 15 min. 44 sec. 21.2 million