2015-04-22 5 views
2

Я вижу, что все функции AWK включены в GAWK, помимо использования системы, у которой нет установленной GAWK, есть ли веская причина, по которой я должен использовать AWK против GAWK? Имеет ли AWK лучшую производительность по сравнению с GAWK?Должен ли я всегда использовать GAWK над AWK?

+0

Что вы имеете в виду, когда говорите 'awk'? –

+0

'gawk' является одной конкретной реализацией языка' awk'. Команда 'awk' по умолчанию может быть любой из нескольких различных реализаций, в зависимости от системы и того, как она настроена. Вы должны быть более конкретными. В моей Linux-системе (Linux Mint 17) '/ usr/bin/awk' является символической ссылкой на'/etc/alternatives/awk', которая, в свою очередь, символическая ссылка на '/ usr/bin/gawk'. –

ответ

5

awk может относиться ко многим вещам. Есть awk-the-standard, и есть много разных реализаций, один из которых - gawk.

Неиспользование специфичных для реализации функций означает, что у вас будет высокая вероятность того, что ваш код будет работать без изменений в других реализациях awk-the-language.

gawk, будучи одна реализация awk -The-языка, утверждает, что соответствует awk -The стандарта, добавляя некоторые дополнительные функции.

$ man awk 
… 
DESCRIPTION 
    Gawk is the GNU Project's implementation of the AWK programming 
    language. It conforms to the definition of the language in the 
    POSIX 1003.1 Standard. This version in turn is based on the 
    description in The AWK Programming Language, by Aho, Kernighan, 
    and Weinberger. Gawk provides the additional features found in 
    the current version of Brian Kernighan's awk and a number of 
    GNU-specific extensions. 
… 

Что касается скорости, используя gawk как «обычный» awk не должны сделать никакой разницы – часто, когда gawk установлен, awk будет просто символическая ссылка на gawk что означает, что они будут точно такая же программа.

Однако, использование gawk -специфических функций будет означать, что вы будете привязаны к этой конкретной реализации –, поэтому, если (предположительно) вы найдете более быструю реализацию, вам, вероятно, придется адаптировать свой скрипт вместо просто заменяя двоичный файл. (Там может быть реализаций, которые быстрее, но я не знаю ни одного, как я никогда раньше не было необходимости, чтобы сделать мои awk скрипты работать быстрее.)

Лично я склонен придерживаться «простой» awk и не используйте gawk -специфические функции, но если вы не заботитесь о переключении на другую реализацию, расширения gawk могут сделать ваш скрипт проще для записи и сэкономить ваше время с этой целью.

0

Предполагая, что «AWK» означает любой awk, который не является gawk - Нет. Всегда используйте gawk, если это вообще возможно. Если это не ваша система, установите ее.

+0

Разве вы не должны использовать mawk, если вам нужно более быстрое выполнение? –

+1

Когда-то давно, когда mawk был минимально признанным awk, оптимизированным для производительности, это было так, но теперь mawk поддерживает больше расширений gawk, чем любой другой awk (кроме несуществующего tawk), поэтому он ушел в новом направлении. В любом случае, обычно проблемы с производительностью awk связаны с дизайном исполняемого скрипта, а не с выполнением awk-реализации, и все awk-скрипты обычно работают так же быстро, как эквивалентные скомпилированные C-программы, поэтому IMHO лучше всего использовать gawk. –

+0

Я сомневаюсь, что когда-нибудь смогу его найти, но я давно запомнил вопрос, и я думаю, что даже вы прокомментировали тайминги. Это был вопрос о том, как делать какие-то строковые манипуляции. Мой ответ (до того, как я удалил свою учетную запись) был примерно в 6 раз быстрее в mawk, используя substr, чем все остальные, поэтому я всегда думал, что это будет быстрее. Также в моем опыте c-код примерно в два раза быстрее, чем любая аналогичная awk-программа. –

2

В настоящее время наиболее распространенной версией AWK является gawk, и, возможно, вторая по распространенности - mawk, по крайней мере потому, что это система AWK на debian.

Процитирует вывод apt-cache show mawk

Mawk меньше, и гораздо быстрее, чем простак. Он имеет некоторое время компиляции пределов, такие как NF = 32767 и Sprintf буфер = 1020.

На стороне простака есть большее число скважинных расширений мысли и, я думаю, лучше управление ошибок и более эффективные сообщения об ошибках, которые являются настоящим бонусом при отладке сложного сценария и могут быть хорошей причиной для использования gawk, даже если вас не интересуют его расширения.

С другой стороны, если у вас есть отладочный скрипт, если вам не требуется определенное расширение, если вы можете жить со встроенными пределами mawk (это много ifs), и вы хотите сжать последний бит производительности, не выходя из комфорта AWK, тогда mawk - путь.

Смежные вопросы