Хотя я согласен, что в теории grep
должно быть быстрее, чем awk
на практике, YMMV, так как это во многом зависит от используемой вами реализации.
здесь сравниваются grep и awk busybox 1.20.0, GNU grep 2.14, mawk 1.3.3, GNU awk 4.0.1 в Debian / Linux 7.0 amd64 (с glibc 2.17) в языке UTF-8 на 240-мегабайтном файле из 2,5-миллиметровых строк 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
В локали C только GNU grep получает значительное ускорение и становится быстрее, чем mawk
.
Набор данных, тип регулярного выражения также может иметь большое значение. Для регулярных выражений, awk
следует сравнить , grep -E
как awk
регэксп «S являются расширенными УЭ.
Для этого набора данных awk
может быть быстрее, чем grep
в системах на основе busybox, где mawk
по умолчанию awk
используется стандарт, а языковой стандарт по умолчанию - на основе UTF-8 (IIRC, как это было в Ubuntu).
time
время, необходимое для выполнения команды. Пример:time ls -l
.