awk, mawk, nawk, gawk… ЩО?


38

Я щойно почав вивчати awk, і я трохи розгублений у всіх тих версіях навколо. Чи є "версія", яка є у всіх системах, схожих на Unix? Мовляв, ти знаєш, звичайний vi? Чи підтримує стандартний awk варіант -F?

Відповіді:


37

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 (реалізація Брайана В. Кернігана) тощо.


3
Оригінальний awk відсутній у будь-якій системі Unix, подібної до мене. Часто /usr/bin/awkзапускають nawk, або gawk, або BusyBox awk (схожий за поведінкою на gawk).
сумнівним

10
Станом на кінець 2012 року системи Ubuntu / Debian встановлюють mawk за замовчуванням. Командний рядок file /etc/alternatives/awkповертаєтьсяsymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'

чи має MAWK всі функції GAWK, такі як справжні багатовимірні масиви?
WYSIWYG

2
@JordonBedwell Так. Є: повтори повторних викидів не можливі в mawk. Він також не підтримує багатовимірні масиви.
WYSIWYG

1
@dubiousjim Ubuntu має оригінал-awk у сховищі Всесвіту.
jarno

6

Можна просто використовувати awk. Він визначається POSIX і тому повинен існувати у всіх системах, сумісних з POSIX.

-FПараметр мандат, який , як добре.


1
... але подбайте про те, щоб сказати, що ви можете використовувати, щоб забезпечити сумісність з іншою версією. Наприклад, не використовуйте gensub(), тестуйте з awk-> gawk, і не думайте, що ви добре піти ...
dmckee

1
@dmckee, ви можете використовувати gawk --posixдля того, щоб гаук працював відповідно до стандарту POSIX. Він також перевіряє, що ваш сценарій відповідає стандарту. Ви можете використовувати awk --posix '' 2>/dev/nullв Ubuntu незалежно від того, якщо gawk, mawk або original-awk використовується як awk, але параметр posix розпізнається лише gawk. --posix має бути останнім варіантом для оригіналу-awk. Ви можете використовувати awk -W posix ''з gawk та mawk.
jarno

1
@dmckee, mawk --posix ''не вдається, якщо ви використовуєте mawk 1.3.3, але вдається з повідомленням про помилку, якщо ви використовуєте mawk 1.3.4
jarno

1

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


Потрібно не завжди бути пов'язаними між собою; іноді це важко пов'язане.
сумнівним

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.