awk, mawk, nawk, gawk… QUOI?

38

Je viens de commencer à apprendre awk et je suis un peu confus à propos de toutes ces versions. Y a-t-il une "version" qui se trouve sur tous les systèmes de type Unix? Comme, vous savez, plaine vi? L'awk standard prend-il en charge l'option -F?

Der Hochstapler
la source

Réponses:

37

awk - le plus courant et se retrouvera sur la plupart des systèmes de type Unix, la version la plus ancienne et inférieure aux plus récents.

mawk - l'implémentation AWK rapide dont la base de code est basée sur un interpréteur de code octet.

nawk - pendant le développement du langage AWK, les auteurs ont publié une nouvelle version (d'où le n - n ew awk) pour éviter toute confusion. Pensez-y comme le Python 3.0 d'AWK.

gawk - abrégé de GNU awk. La seule version dans laquelle les développeurs ont tenté d'ajouter le support i18n. Les utilisateurs autorisés à écrire leurs propres bibliothèques partagées C pour l'étendre avec leurs propres "plug-ins". Cette version est l'implémentation standard pour Linux, l'AWK d'origine a été écrit pour Unix v7.

Il existe d'autres versions comme jawk (implémentation java), bwk (implémentation de Brian W. Kernighan) et ainsi de suite.

John T
la source
3
L'awk d'origine n'est présent sur aucun système de type Unix dont je dispose. Souvent, /usr/bin/awkexécutera nawk, ou gawk, ou BusyBox awk (comportement similaire à gawk).
dubiousjim
10
À la fin de 2012, les systèmes Ubuntu / Debian installent mawk par défaut. La ligne de commande file /etc/alternatives/awkrevientsymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'
MAWK possède-t-il toutes les fonctionnalités GAWK telles que les vrais tableaux multidimensionnels?
WYSIWYG
2
@JordonBedwell Yep .. Il y a: les répétitions d'expression régulière ne sont pas possibles dans mawk. Il ne prend pas non plus en charge les tableaux multidimensionnels.
WYSIWYG
1
@dubiousjim Ubuntu a original-awk dans le référentiel de l'univers.
jarno
6

Vous pouvez simplement utiliser awk. Il est défini par POSIX et doit donc exister sur tous les systèmes conformes à POSIX.

Le -Fparamètre est également mandaté par cela .

Joey
la source
1
... mais prenez soin de vérifier avec la norme pour savoir ce que vous pouvez utiliser pour assurer la compatibilité avec une autre version. Par exemple, n'utilisez pas gensub(), ne testez pas avec awk-> gawk, et pensez que vous êtes
prêt
1
@dmckee, vous pouvez utiliser gawk --posixpour faire fonctionner gawk selon la norme POSIX. Il vérifie également que votre script respecte la norme. Vous pouvez utiliser awk --posix '' 2>/dev/nulldans Ubuntu, peu importe, si gawk, mawk ou original-awk est utilisé comme awk, mais l'option posix n'est reconnue que par gawk. --posix doit être la dernière option pour original-awk. Vous pouvez utiliser awk -W posix ''avec gawk et mawk.
jarno
1
@dmckee, oh mawk --posix ''échoue, si vous utilisez mawk 1.3.3, mais réussit avec un message d'erreur, si vous utilisez mawk 1.3.4
jarno
1

awksera sur à peu près tous les systèmes basés sur * NIX, mais les détails exacts de ce qu'il prend en charge changeront légèrement car il est tout à fait possible, il sera simplement lié à une version différente semblable à la façon dont /bin/shest souvent lié à un shell spécifique, souvent bashou l'un des ses dérivés. (Pour mémoire, je connais aussi beaucoup de machines où viest également lié à un lien symbolique vim.)

Matthew Scharley
la source
N'a pas toujours besoin d'un lien symbolique; parfois, c'est lié.
dubiousjim
0

La page Wikipedia AWK est une bonne référence pour commencer à comprendre AWK.
L' option Séparateur de champs ' -F' est prise en charge dans toutes les variantes d'AWK-afaik.

nik
la source