awk, mawk, nawk, gawk ... WAS?


37

Ich habe gerade angefangen, awk zu lernen und bin ein wenig verwirrt über all diese Versionen. Gibt es eine "Version", die auf allen Unix-ähnlichen Systemen zu finden ist? Weißt du, schlicht vi? Unterstützt der Standard awk die Option -F?

Antworten:


37

awk - das gebräuchlichste und wird auf den meisten Unix-ähnlichen Systemen zu finden sein, älteste Version und schlechter als neuere.

mawk - schnelle AWK-Implementierung, deren Codebasis auf einem Bytecode-Interpreter basiert.

nawk - während die AWK Sprache der Autoren eine neue Version entwickelt wurde (daher die frei n - n ew awk) um Verwirrung zu vermeiden. Stellen Sie es sich wie Python 3.0 von AWK vor.

gawk - abgekürzt von GNU awk. Die einzige Version, in der die Entwickler versuchten, i18n-Unterstützung hinzuzufügen. Erlaubte Benutzern, ihre eigenen C-Shared Libraries zu schreiben, um sie mit ihren eigenen "Plug-Ins" zu erweitern. Diese Version ist die Standardimplementierung für Linux, das ursprüngliche AWK wurde für Unix v7 geschrieben.

Es gibt andere Versionen wie jawk (Java-Implementierung), bwk (Brian W. Kernighans Implementierung) und so weiter.


3
Die ursprüngliche awk ist auf keinem verfügbaren Unix-ähnlichen System vorhanden. Oft /usr/bin/awkläuft nawk oder gawk oder BusyBox awk (ähnliches Verhalten wie gawk).
dubiousjim

10
Ab Ende 2012 installieren Ubuntu / Debian-Systeme standardmäßig mawk. Die Kommandozeile file /etc/alternatives/awkkehrt zurücksymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'

Hat MAWK alle GAWK-Funktionalitäten wie echte mehrdimensionale Arrays?
WYSIWYG

2
@JordonBedwell Yep .. Es gibt: Regex-Wiederholungen sind in mawk nicht möglich. Es werden auch keine mehrdimensionalen Arrays unterstützt.
WYSIWYG

1
@dubiousjim Ubuntu hat original-awk im Universum-Repository.
Jarno

6

Sie können nur verwenden awk. Es wird von POSIX definiert und muss daher auf allen POSIX-konformen Systemen vorhanden sein.

Damit ist auch der -FParameter beauftragt .


1
... aber prüfen Sie anhand des Standards, was Sie verwenden können, um die Kompatibilität mit anderen Versionen sicherzustellen. Verwenden gensub(), testen Sie zum Beispiel nicht mit awk-> gawkund denken Sie, Sie können
loslegen

1
Mit @dmckee können Sie gawk --posixgawk nach POSIX-Standard arbeiten lassen. Es überprüft auch, ob Ihr Skript dem Standard entspricht. Sie könnten awk --posix '' 2>/dev/nullin Ubuntu verwenden, egal ob gawk, mawk oder original-awk als awk verwendet wird, aber die posix-Option wird nur von gawk erkannt. --posix muss die letzte Option für original-awk sein. Sie könnten awk -W posix ''mit gawk und mawk verwenden.
Jarno

1
@dmckee, oh, mawk --posix ''schlägt fehl, wenn Sie mawk 1.3.3 verwenden, aber mit Fehlermeldung erfolgreich, wenn Sie mawk 1.3.4 verwenden
jarno

1

awkwird auf nahezu jedem * NIX-basierten System verfügbar sein, aber die genauen Spezifikationen der unterstützten Systeme werden sich geringfügig ändern, da es durchaus möglich ist, dass sie einfach mit einer anderen Version /bin/shverknüpft werden, ähnlich der, die häufig mit einer bestimmten Shell verknüpft ist, häufig bashoder mit einer von seine Derivate. (Ich kenne auch eine Menge Maschinen, auf denen ebenfalls viSymlinks vorhanden sind vim.)


Muss nicht immer verbunden sein; manchmal ist es fest miteinander verbunden.
dubiousjim

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.