Я вижу, что все функции AWK включены в GAWK, помимо использования системы, у которой нет установленной GAWK, есть ли веская причина, по которой я должен использовать AWK против GAWK? Имеет ли AWK лучшую производительность по сравнению с GAWK?Должен ли я всегда использовать GAWK над AWK?
ответ
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
могут сделать ваш скрипт проще для записи и сэкономить ваше время с этой целью.
Предполагая, что «AWK» означает любой awk, который не является gawk - Нет. Всегда используйте gawk, если это вообще возможно. Если это не ваша система, установите ее.
Разве вы не должны использовать mawk, если вам нужно более быстрое выполнение? –
Когда-то давно, когда mawk был минимально признанным awk, оптимизированным для производительности, это было так, но теперь mawk поддерживает больше расширений gawk, чем любой другой awk (кроме несуществующего tawk), поэтому он ушел в новом направлении. В любом случае, обычно проблемы с производительностью awk связаны с дизайном исполняемого скрипта, а не с выполнением awk-реализации, и все awk-скрипты обычно работают так же быстро, как эквивалентные скомпилированные C-программы, поэтому IMHO лучше всего использовать gawk. –
Я сомневаюсь, что когда-нибудь смогу его найти, но я давно запомнил вопрос, и я думаю, что даже вы прокомментировали тайминги. Это был вопрос о том, как делать какие-то строковые манипуляции. Мой ответ (до того, как я удалил свою учетную запись) был примерно в 6 раз быстрее в mawk, используя substr, чем все остальные, поэтому я всегда думал, что это будет быстрее. Также в моем опыте c-код примерно в два раза быстрее, чем любая аналогичная awk-программа. –
В настоящее время наиболее распространенной версией AWK является gawk, и, возможно, вторая по распространенности - mawk, по крайней мере потому, что это система AWK на debian.
Процитирует вывод apt-cache show mawk
Mawk меньше, и гораздо быстрее, чем простак. Он имеет некоторое время компиляции пределов, такие как NF = 32767 и Sprintf буфер = 1020.
На стороне простака есть большее число скважинных расширений мысли и, я думаю, лучше управление ошибок и более эффективные сообщения об ошибках, которые являются настоящим бонусом при отладке сложного сценария и могут быть хорошей причиной для использования gawk, даже если вас не интересуют его расширения.
С другой стороны, если у вас есть отладочный скрипт, если вам не требуется определенное расширение, если вы можете жить со встроенными пределами mawk (это много ifs), и вы хотите сжать последний бит производительности, не выходя из комфорта AWK, тогда mawk - путь.
- 1. gsub issue with awk (gawk)
- 2. Должен ли я использовать mysqlnd над libmysql?
- 3. Должен ли я всегда использовать GL_CULL_FACE?
- 4. Должен ли я всегда использовать .off ('load') ;?
- 5. Должен ли я всегда использовать дженерики?
- 6. Должен ли я всегда использовать HTML-Doctypes?
- 7. Должен ли я всегда использовать connection.close
- 8. Должен ли я всегда использовать конструктор в C#
- 9. Должен ли я всегда удалятьEventListener?
- 10. Gawk-ing в среднем всегда возвращает 0
- 11. Когда я должен использовать запись над кортежем?
- 12. Почему я должен использовать Doctrine над Zend_Db?
- 13. Должен ли я когда-либо использовать display: block, или я должен всегда использовать display: flex?
- 14. Почему я должен использовать HashSet над Словарем?
- 15. Объединение разделенных линий с awk/gawk
- 16. Должен ли я использовать history.js?
- 17. Должен ли я использовать итератор для создания цикла над HashMap?
- 18. Должен ли я использовать ejb @Schedule аннотацию над графиком исполнителя
- 19. Есть ли ситуация, когда я должен использовать .attr() над .prop()?
- 20. Почему я должен использовать Powershell над C#?
- 21. Почему я должен использовать immutablejs над object.freeze?
- 22. Должен ли я использовать ссылку?
- 23. Должен ли я всегда использовать MySQL InnoDB поверх MyISAM?
- 24. В C++, должен ли я почти всегда использовать виртуальное наследование?
- 25. токен доступа: должен ли я всегда использовать HTTPS?
- 26. Должен ли я использовать noexcept для getters всегда?
- 27. Должен ли я всегда использовать статические заводские методы вместо конструкторов?
- 28. Должен ли я всегда использовать Task.Delay вместо Thread.Sleep?
- 29. Должен ли я всегда использовать параллельный поток, когда это возможно?
- 30. Должен ли я всегда использовать pillar.get вместо столбца ['foo']?
Что вы имеете в виду, когда говорите 'awk'? –
'gawk' является одной конкретной реализацией языка' awk'. Команда 'awk' по умолчанию может быть любой из нескольких различных реализаций, в зависимости от системы и того, как она настроена. Вы должны быть более конкретными. В моей Linux-системе (Linux Mint 17) '/ usr/bin/awk' является символической ссылкой на'/etc/alternatives/awk', которая, в свою очередь, символическая ссылка на '/ usr/bin/gawk'. –