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

14320
Der Hochstapler

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

26

5 Antworten auf die Frage

31
John T

awk - das häufigste und wird auf den meisten Unix-artigen Systemen gefunden, älteste und neuere.

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

nawk - während die AWK Sprache entwickelt wurde die Autoren eine neue Version veröffentlicht (daher die n - n ew awk) Verwirrung zu vermeiden. Betrachten Sie es wie Python 3.0 von AWK.

Gawk - abgekürzt von GNU awk. Die einzige Version, in der die Entwickler versuchten, Unterstützung für i18n hinzuzufügen. Erlaubte Benutzern, ihre eigenen gemeinsam genutzten C-Bibliotheken 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.

Das Original awk ist auf keinem Unix-ähnlichen System, das ich zur Verfügung habe, vorhanden. Häufig läuft `/ usr / bin / awk` nawk oder gawk oder BusyBox awk (ähnliches Verhalten wie gawk). dubiousjim vor 12 Jahren 3
Ab Ende 2012 installieren Ubuntu / Debian-Systeme mawk standardmäßig. Die Befehlszeile "Datei / etc / alternatives / awk" gibt "symbolischen Link zu / usr / bin / mawk" zurück Mike Sherrill 'Cat Recall' vor 11 Jahren 8
verfügt MAWK über alle GAWK-Funktionen wie echte mehrdimensionale Arrays? WYSIWYG vor 10 Jahren 0
Ich weiß, das ist spät @ WYSIWYG, aber Mawk hat ein paar Macken, hauptsächlich mit regexp, obwohl Sie am besten Gawk installieren, wenn Sie eine portable IMO-Implementierung wünschen. Jordon Bedwell vor 8 Jahren 0
@JordonBedwell Yep .. Es gibt: Regex-Wiederholungen sind in mawk nicht möglich. Es unterstützt auch keine mehrdimensionalen Arrays. WYSIWYG vor 8 Jahren 0
@dubiousjim Ubuntu hat original-awk im Universum-Repository. jarno vor 8 Jahren 1
@ WYSIWYG Auch einige Funktionen wie `strtonum` fehlen. phk vor 7 Jahren 0
5
Joey

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

Der -FParameter ist auch hiervon abhängig .

... aber überprüfen Sie den Standard, um herauszufinden, wie Sie die Kompatibilität mit anderen Versionen sicherstellen können. Verwenden Sie beispielsweise nicht "gensub ()", testen Sie es mit "awk" -> "gawk" und denken Sie, dass Sie gut damit sind ... dmckee vor 14 Jahren 0
@dmckee, Sie können `gawk --posix` verwenden, um Gawk nach POSIX-Standard zu arbeiten. Es überprüft auch, ob Ihr Skript dem Standard entspricht. Sie könnten `awk --posix '' 2> / dev / null 'in 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 vor 8 Jahren 0
@dmckee, oh `mawk --posix ''` schlägt fehl, wenn Sie mawk 1.3.3 verwenden, aber es wird eine Fehlermeldung angezeigt, wenn Sie mawk 1.3.4 verwenden jarno vor 8 Jahren 0
1
runlevel0

Zuerst die schnelle Antwort:

Sie müssen sich nicht die Mühe: Ihr System ist awknur ein symbolischer Link auf entweder mawkoder gawkund was noch wichtiger ist : alle drei Versionen, awk, mawkund gawksind vollständig kompatibel. Es gibt (soll) einen Geschwindigkeitsunterschied zwischen awk/ gawkund mawkdem (sollen) schneller sein.

Die einzige Ausnahme ist, nawkdass es an Funktionalität fehlt, aber die Chance, diese in freier Wildbahn zu finden, ist eher gering.

Nicht vollständig kompatibel, es gibt durchaus unterschiedliche Optionen. Vielleicht haben die die gleiche Syntax / Sprache. Bdoserror vor 9 Jahren 3
Laut Wikipedia verwenden zB FreeBSD, NetBSD, OpenBSD und OS X Nawk. jarno vor 8 Jahren 0
[Here] (https://github.com/ThomasDickey/original-mawk/issues/34) ist ein Beispiel für einen Fall, in dem Gawk schneller ist als Mawk. jarno vor 8 Jahren 0
0
Matthew Scharley

awkwird auf fast jedem * NIX-basierten System verfügbar sein, aber die genauen Details dessen, was es unterstützt, werden sich leicht ändern, da es durchaus möglich ist, dass es einfach mit einer anderen Version /bin/shverknüpft wird, ähnlich wie es oft mit einer bestimmten Shell bashoder oft mit einer Shell verbunden ist seine Derivate. (Für das Protokoll weiß ich auch eine Menge Maschinen, zu denen auch viein Symlink besteht vim.)

Muss nicht immer symlinked sein; manchmal ist es hart verbunden. dubiousjim vor 12 Jahren 0
0
nik

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