В то время как я согласовываю это в теории grep
должно быть быстрее, чем awk
, на практике, YMMV, поскольку это во многом зависит от реализации, которую Вы используете.
здесь выдерживая сравнение busybox 1.20.0's grep и awk, 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.5M строки символов только для 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
.
Набор данных, тип regexp может также иметь большое значение. Для regexps, awk
должен сравниться grep -E
как awk
regexps расширяются REs.
Для этого набора данных, awk
могло быть быстрее, чем grep
на busybox основывал системы или системы где mawk
значение по умолчанию awk
и локаль по умолчанию является базирующимся UTF-8 (IIRC, это раньше имело место в Ubuntu).
Общий способ использования strace
:
strace -fe trace=open <command>
Конфигурационные файлы часто заканчиваются на .conf
. Таким образом, вы можете отфильтровать результат, обратившись к grep '\.conf
.
Другой вариант, используя строки
:
$ strings $(which httpd) | grep '\.conf'
-D SERVER_CONFIG_FILE="conf/httpd.conf"
conf/httpd.conf
Allowed in *.conf
directive in your httpd.conf file to list a non-root
Во многих программах также есть возможность узнать, какой конфигурационный файл он читает, например, с помощью apache
:
$ httpd -V | grep '\.conf'
-D SERVER_CONFIG_FILE="conf/httpd.conf"