awk, mawk, nawk, gawk ... ЧТО?

14128
Der Hochstapler

Я только начал изучать awk и немного запутался во всех этих версиях. Есть ли какая-либо "версия", которая встречается во всех Unix-подобных системах? Как, вы знаете, простой ви? Стандартный awk поддерживает опцию -F?

26

5 ответов на вопрос

31
John T

awk - наиболее распространенный и будет встречаться на большинстве Unix-подобных систем, самая старая версия и уступающая новым.

mawk - быстрая реализация AWK, основа кода которой основана на интерпретаторе байт-кода.

nawk - во время разработки языка AWK авторы выпустили новую версию (отсюда n - n ew awk), чтобы избежать путаницы. Думайте об этом как о Python 3.0 AWK.

gawk - сокращенно от GNU awk. Единственная версия, в которой разработчики пытались добавить поддержку i18n. Позволял пользователям писать свои собственные разделяемые библиотеки C, чтобы расширять их с помощью своих собственных «плагинов». Эта версия является стандартной реализацией для Linux, оригинальный AWK был написан для Unix v7.

Существуют и другие версии, такие как jawk (реализация java), bwk (реализация Брайана В. Кернигана) и так далее.

Оригинальный awk отсутствует ни в одной Unix-подобной системе, которая у меня есть. Часто `/ usr / bin / awk` запускает nawk, или gawk, или BusyBox awk (похожий по поведению на gawk). dubiousjim 12 лет назад 3
По состоянию на конец 2012 года системы Ubuntu / Debian устанавливают mawk по умолчанию. Командная строка `file / etc / alternatives / awk` возвращает символическую ссылку на / usr / bin / mawk` Mike Sherrill 'Cat Recall' 11 лет назад 8
MAWK обладает всеми функциями GAWK, такими как настоящие многомерные массивы? WYSIWYG 11 лет назад 0
Я знаю, что уже поздно @WYSIWYG, но у mawk есть несколько причуд, в основном с регулярными выражениями, хотя лучше всего установить gawk, если вы хотите иметь переносимую реализацию IMO. Jordon Bedwell 9 лет назад 0
@JordonBedwell Да. Есть: повторения регулярных выражений невозможны в mawk. Он также не поддерживает многомерные массивы. WYSIWYG 9 лет назад 0
@dubiousjim Ubuntu имеет оригинальный-awk в хранилище вселенной. jarno 9 лет назад 1
@WYSIWYG Также отсутствуют некоторые функции, такие как `strtonum`. phk 7 лет назад 0
5
Joey

Вы можете просто использовать awk. Он определяется POSIX и поэтому должен существовать во всех POSIX-совместимых системах.

-FПараметр мандат, который, как хорошо.

... но поинтересуйтесь стандартом, чтобы узнать, что вы можете использовать для обеспечения совместимости с другой версией. Например, не используйте `gensub ()`, тестируйте с помощью `awk` ->` gawk` и думайте, что вы готовы пойти ... dmckee 14 лет назад 0
@dmckee, вы можете использовать `gawk --posix`, чтобы заставить gawk работать в соответствии со стандартом POSIX. Он также проверяет ваш сценарий на соответствие стандарту. Вы можете использовать `awk --posix '' 2> / dev / null` в Ubuntu независимо от того, используется ли gawk, mawk или original-awk в качестве awk, но опция posix распознается только gawk. --posix должен быть последним вариантом для оригинала-awk. Вы можете использовать awk -W posix с gawk и mawk. jarno 9 лет назад 0
@dmckee, о `mawk --posix ''` завершается неудачно, если вы используете mawk 1.3.3, но преуспевает с сообщением об ошибке, если вы используете mawk 1.3.4 jarno 9 лет назад 0
1
runlevel0

First the quick answer:

You don't have to bother: Your system's awk is just a symlink to either mawk or gawk AND more importantly: all three versions, awk, mawk and gawk are completely compatible. There is (said to be) a difference in speed between awk/gawk and mawk being the (said to be) faster.

The only exception is nawk which lacks some functionality, but chances to find this one in the wild are rather scarce.

Не полностью совместимо, есть различия в вариантах наверняка. Может быть, у того же синтаксического анализа / языка. Bdoserror 10 лет назад 3
Согласно Википедии, например, FreeBSD, NetBSD, OpenBSD и OS X используют nawk. jarno 9 лет назад 0
[Здесь] (https://github.com/ThomasDickey/original-mawk/issues/34) является примером случая, когда gawk работает быстрее, чем mawk. jarno 9 лет назад 0
0
Matthew Scharley

awkбудет присутствовать практически на каждой системе * NIX, но точная спецификация того, что она поддерживает, будет слегка изменена, поскольку вполне возможно, что она будет просто символически связана с другой версией, похожей на то, как /bin/shчасто она связана с определенной оболочкой, часто bashили с одной из его производные. ( viКстати, я также знаю много машин, на которых есть ссылки vim).

Не всегда нужно быть символическими; иногда это сильно связано. dubiousjim 12 лет назад 0
0
nik

Страница Wikipedia AWK - хороший стартовый справочник для начинающих понимать AWK.
Опция Разделитель полей ' -F' поддерживается во всех вариантах AWK - afaik.