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?

Der Hochstapler
quelle

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.

John T
quelle
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 .

Joey
quelle
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.)

Matthew Scharley
quelle
Muss nicht immer verbunden sein; manchmal ist es fest miteinander verbunden.
dubiousjim
0

Die Wikipedia AWK-Seite ist eine gute Referenz für den Einstieg in AWK.
Die Feldtrenn Option ‚ -F‘ ist in allen unterstützten Varianten von AWK - afaik.

nik
quelle