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.
$ 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
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 com grep -E
como awk
regexps 's são REs prolongados.
Para esse conjunto de dados, awk
pode ser mais rápido do que grep
em sistemas baseados em busybox ou sistemas onde mawk
é o padrão awk
e o código do idioma padrão é baseado em UTF-8 (IIRC, costumava ser o caso no Ubuntu).
time
tempo necessário para executar o comando. Ex:time ls -l
.