Embora eu concorde que, em teoria, grep
deva ser mais rápido que awk
, na prática, o YMMV 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 locale UTF-8 em um arquivo de 240MB de 2.5 M linhas de caracteres somente 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
Na localidade C, apenas o GNU grep recebe um aumento significativo e se torna mais rápido que mawk
.
O conjunto de dados, o tipo do regexp também pode fazer uma grande diferença. Para regexps, awk
deve ser comparado a grep -E
, pois as expressões regulares deawk
são REs estendidos.
Para este conjunto de dados, awk
pode ser mais rápido que grep
em sistemas ou sistemas baseados em busybox onde mawk
é o padrão awk
e o local padrão é UTF-8 (IIRC, costumava ser o caso no Ubuntu).