Хоча я згоден, що теоретично grep
має бути швидше, ніж awk
на практиці YMMV, оскільки це багато в чому залежить від використання, яку ви використовуєте.
тут порівнюються греп і awk зайнятої 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 отримує значне збільшення та стає швидшим, ніж mawk
.
Набір даних, тип регулярного виразу також можуть істотно змінитись. Що стосується регулярних виразів, awk
слід порівнювати їх з тим, grep -E
як awk
регулярні регепси розширені.
Цей набір даних awk
може бути швидшим, ніж grep
у системах або системах на базі зайнятих ящиків, де mawk
за замовчуванням awk
є локаль, а за замовчуванням - UTF-8 (IIRC, це було у Ubuntu).
time
командою, щоб визначити, скільки часу потрібно для запуску команди. Приклад:time ls -l
.