Для захвата конкретного шаблона awk
и grep
может быть использован. Почему мы должны использовать один над другим? Что быстрее и почему?
Если бы у меня был файл журнала, и я хотел получить определенный шаблон, я мог бы сделать одно из следующего
awk '/pattern/' /var/log/messages
или
grep 'pattern' /var/log/messages
Я не делал никаких тестов, поэтому я бы не знал. Может кто-нибудь уточнить это? Приятно знать внутреннюю работу этих двух инструментов.
linux
awk
grep
performance
holasz
источник
источник
time
время, необходимое для выполнения команды. Пример:time ls -l
.Ответы:
grep скорее всего будет быстрее:
awk - интерпретируемый язык программирования, где grep - это скомпилированная программа c-кода (которая дополнительно оптимизирована для поиска шаблонов в файлах).
(Примечание: я выполнил обе команды дважды, чтобы кэширование не могло исказить результаты)
Подробнее о переводимых языках в Википедии.
Как правильно заметил Стефан в комментариях, ваш пробег может отличаться из-за использования используемых вами grep и awk, операционной системы и набора символов, который вы обрабатываете.
источник
Используйте самый конкретный и выразительный инструмент. Инструмент, который лучше всего подходит для вашего случая использования, вероятно, будет самым быстрым.
Как грубое руководство:
источник
perl
вместоawk
. если вам нужно что-то более сложное, чем grep / cut / sed, то шансов на awk будет недостаточно, и вам нужно что-то «полноценное»Когда поиск только по строкам, а скорость имеет значение, вы должны почти всегда использовать
grep
. Это на несколько порядков быстрее, чемawk
когда дело доходит до грубого поиска.source Различия в функциональности и производительности sed, awk и других утилит Unix.
источник
awk ... has PCRE matching for regular expressions
что это совершенно не соответствует действительности.Хотя я согласен, что в теории
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-только символы.
В локали C только GNU grep получает значительное ускорение и становится быстрее, чем
mawk
.Набор данных, тип регулярного выражения также может иметь большое значение. Для регулярных выражений,
awk
следует сравнить ,grep -E
какawk
регэксп «S являются расширенными УЭ.Для этого набора данных
awk
может быть быстрее, чемgrep
в системах на основе busybox, гдеmawk
по умолчаниюawk
используется стандарт, а языковой стандарт по умолчанию - на основе UTF-8 (IIRC, как это было в Ubuntu).источник
Короче говоря,
grep
делает только одну вещь, как и многие другие инструменты UNIX, и это соответствует линии с данным шаблоном, и это делает это хорошо. С другой стороны,awk
это более сложный инструмент, так как это полный язык программирования, определенный стандартом POSIX, с типичными функциями, такими как переменные, массивы, выражения, функции или операторы управления для сканирования и обработки паттернов.На мой взгляд, это зависит от реализации того, как оба инструмента работают в случае сопоставления с образцом, и от размера некоторого ввода, который вы хотите обработать. Я ожидаю, что grep обычно более эффективен, чем awk, поскольку он выполняет только сопоставление. Но вы не можете написать с помощью grep простой код для выполнения более сложных задач, таких как дальнейшая обработка сопоставленных записей, вычисление или печать результатов без использования других инструментов.
источник