GNU/Linux >> Tutoriales Linux >  >> Linux

Usando grep vs awk

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

Linux
  1. Usando grep para buscar en reversa

  2. ¿Cómo fusionar dos archivos usando AWK?

  3. Encontrar archivos ejecutables usando ls y grep

  4. Eliminar un carácter específico usando awk o sed

  5. ¿Cómo eliminar un prefijo de palabra usando grep?

Cómo eliminar líneas vacías en archivos usando Grep, Sed y Awk

Encuentra texto en archivos en Linux usando grep

Otro solucionador de rompecabezas de Sudoku usando AWK

Explicación sobre el comando awk usando ORS, NR, FS, RS

Mostrar coincidencia encontrada o no usando awk

¿Usando un índice para hacer grep más rápido?