Si bien estoy de acuerdo en que en teoría grep
debería ser más rápido que awk
, en la práctica, YMMV ya que eso depende mucho de la implementación que use.
aquí comparando grep y awk de busybox 1.20.0, GNU grep 2.14, mawk 1.3.3, GNU awk 4.0.1 en Debian / Linux 7.0 amd64 (con glibc 2.17) en un entorno local UTF-8 en un archivo de 240 MB de líneas de 2.5M Caracteres solo ASCII.
$ time busybox grep error error | wc -l
331003
busybox grep error error 8.31s user 0.12s system 99% cpu 8.450 total
wc -l 0.07s user 0.11s system 2% cpu 8.448 total
$ time busybox awk /error/ error | wc -l
331003
busybox awk /error/ error 2.39s user 0.84s system 98% cpu 3.265 total
wc -l 0.12s user 1.23s system 41% cpu 3.264 total
$ time grep error error | wc -l
331003
grep error error 0.80s user 0.10s system 99% cpu 0.914 total
wc -l 0.00s user 0.11s system 12% cpu 0.913 total
$ time mawk /error/ error | wc -l
330803
mawk /error/ error 0.54s user 0.13s system 91% cpu 0.732 total
wc -l 0.03s user 0.08s system 14% cpu 0.731 total
$ time gawk /error/ error | wc -l
331003
gawk /error/ error 1.37s user 0.12s system 99% cpu 1.494 total
wc -l 0.04s user 0.07s system 7% cpu 1.492 total
$ time
En la configuración regional C, solo GNU grep recibe un impulso significativo y se vuelve más rápido que mawk
.
El conjunto de datos, el tipo de expresión regular también puede hacer una gran diferencia. Para las expresiones regulares, awk
debe compararse con las expresiones regulares grep -E
como awk
las expresiones regulares extendidas.
Para este conjunto de datos, awk
podría ser más rápido que grep
en los sistemas basados en busybox o sistemas donde mawk
el valor predeterminado awk
y la configuración regional predeterminada se basa en UTF-8 (IIRC, solía ser el caso en Ubuntu).
time
comando para medir el tiempo que se tarda en ejecutar el comando. Ej:time ls -l
.