awk - Referenzhandbuch, Optionen, Befehlsbeispiele


NAME

awk gawk – Sprache zum Scannen und Verarbeiten von Mustern

ZUSAMMENFASSUNG

gawk [ POSIX or GNU style options ] -f program-file [ - - ] file . . .
gawk [ POSIX or GNU style options ] [ - - ] program-text file . . .

BESCHREIBUNG

Gawk ist die Implementierung der Programmiersprache AWK durch das GNU-Projekt. Es entspricht der Definition der Sprache im POSIX 1003.1-Standard. Diese Version wiederum basiert auf der Beschreibung in The AWK Programming Language von Aho, Kernighan und Weinberger. Gawk bietet die zusätzlichen Funktionen der aktuellen Version von Brian Kernighans awk und zahlreiche GNU-spezifische Erweiterungen.

Die Befehlszeile besteht aus Optionen zum gawk selbst, dem AWK-Programmtext (sofern er nicht über die Optionen -f oder - -include bereitgestellt wird), und Werte, die in den vordefinierten AWK-Variablen ARGC und ARGV verfügbar gemacht werden sollen.

VORWORT

Diese Handbuchseite ist absichtlich so knapp wie möglich gehalten. Ausführliche Informationen finden Sie in GAWK: Effektive AWK-Programmierung, und Sie sollten dort nach der vollständigen Geschichte zu einer bestimmten Funktion suchen. Wo möglich, werden Links zur Online-Version des Handbuchs bereitgestellt.

OPTIONSFORMAT

Gawk-Optionen können entweder traditionelle Ein-Buchstaben-Optionen im POSIX-Stil oder lange Optionen im GNU-Stil sein. POSIX-Optionen beginnen mit einem einzelnen „-“, während lange Optionen mit „- -“ beginnen. Lange Optionen werden sowohl für GNU-spezifische Funktionen als auch für von POSIX vorgeschriebene Funktionen bereitgestellt.

Gawk-spezifische Optionen werden normalerweise in der Form langer Optionen verwendet. Argumente für lange Optionen werden entweder durch ein =-Zeichen ohne dazwischenliegende Leerzeichen mit der Option verbunden oder sie können im nächsten Befehlszeilenargument bereitgestellt werden. Lange Optionen können abgekürzt werden, solange die Abkürzung eindeutig bleibt.

Darüber hinaus verfügt jede lange Option über eine entsprechende kurze Option, sodass die Funktionalität der Option in ausführbaren #!-Skripten verwendet werden kann.

OPTIONEN

Gawk akzeptiert die folgenden Optionen. Standardoptionen werden zuerst aufgelistet, gefolgt von Optionen für gawk-Erweiterungen, alphabetisch nach Kurzoption geordnet.

-f program-file,

- -file Programmdatei Liest die AWK-Programmquelle aus der Datei Programmdatei, statt aus dem ersten Befehlszeilenargument. Es können mehrere -f-Optionen verwendet werden. Mit -f gelesene Dateien werden so behandelt, als ob sie mit einer impliziten @namespace "awk"-Anweisung beginnen würden.

-F fs,

- -field-separator fs Verwenden Sie fs für das Eingabefeldtrennzeichen (den Wert der vordefinierten Variablen FS). .

-v var = val, - -assign var = val

Weisen Sie der Variablen var den Wert val zu, bevor die Ausführung des Programms beginnt. Solche Variablenwerte stehen der BEGIN-Regel eines AWK-Programms zur Verfügung.

-b,

- -characters-as-bytes Behandelt alle Eingabedaten als Einzelbyte-Zeichen. Die Option - -posix überschreibt diese Option.

-c,

- -traditional Im Kompatibilitätsmodus ausführen. Im Kompatibilitätsmodus verhält sich gawk identisch mit Brian Kernighans awk; Keine der GNU-spezifischen Erweiterungen wird erkannt.

-C,

- -copyright Drucken Sie die Kurzversion der GNU-Copyright-Informationsmeldung auf der Standardausgabe und beenden Sie den Vorgang erfolgreich.

-d[file], - -dump-variables[=file]

Drucken Sie eine sortierte Liste globaler Variablen, ihrer Typen und Endwerte in eine Datei. Die Standarddatei ist awkvars.out im aktuellen Verzeichnis.

-D[file], - -debug[=file]

Aktivieren Sie das Debuggen von AWK-Programmen. Standardmäßig liest der Debugger Befehle interaktiv von der Tastatur (Standardeingabe). Das optionale Argument file gibt eine Datei mit einer Liste von Befehlen an, die der Debugger nicht interaktiv ausführen soll.

In diesem Ausführungsmodus lädt gawk den AWK-Quellcode und fordert dann zur Eingabe von Debugging-Befehlen auf. Gawk kann nur AWK-Programmquellen debuggen, die mit den Optionen -f und - -include bereitgestellt werden. Der Debugger ist dokumentiert in GAWK: Effective AWK Programming; siehe https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger.

-e program-text,

- -source program-text Verwenden Sie program-text als AWK-Programmquellcode. Jedes über -e bereitgestellte Argument wird so behandelt, als ob es mit einer impliziten @namespace "awk"-Anweisung beginnt.

-E file, - -exec file

Ähnlich wie -f, jedoch ist diese Option die letzte, die verarbeitet wird. Dies sollte mit #!-Skripten verwendet werden, insbesondere für CGI-Anwendungen, um die Übergabe von Optionen oder Quellcode (!) in der Befehlszeile von einer URL aus zu vermeiden. Diese Option deaktiviert die Zuweisung von Befehlszeilenvariablen.

-g,

- -gen-pot Scannen und analysieren Sie das AWK-Programm und generieren Sie eine Datei im GNU .pot-Format (Portable Object Template) auf der Standardausgabe mit Einträgen für alle lokalisierbaren Zeichenfolgen im Programm. Das Programm selbst wird nicht ausgeführt.

-h,

- -help Gibt eine relativ kurze Zusammenfassung der verfügbaren Optionen auf der Standardausgabe aus. Gemäß den GNU Coding Standards führen diese Optionen zu einem sofortigen, erfolgreichen Beenden.

-i include-file, - -include include-file

Laden Sie eine awk-Quellbibliothek. Dadurch wird mithilfe der Umgebungsvariablen AWKPATH nach der Bibliothek gesucht. Wenn die erste Suche fehlschlägt, wird ein weiterer Versuch unternommen, nachdem das Suffix .awk angehängt wurde. Die Datei wird nur einmal geladen (d. h. Duplikate werden entfernt) und der Code stellt nicht die Hauptprogrammquelle dar. Mit - -include gelesene Dateien werden so behandelt, als ob sie mit einer impliziten @namespace "awk"-Anweisung beginnen.

-I,

- -trace Gibt die internen Bytecodenamen aus, während sie beim Ausführen des Programms ausgeführt werden. Die Kurve wird mit der Standardabweichung gedruckt. Jedem „Op-Code“ ist in der Ausgabe ein +-Zeichen vorangestellt.

-l lib,

- -load lib Lädt eine gawk-Erweiterung aus der gemeinsam genutzten Bibliothek lib. Dadurch wird mithilfe der Umgebungsvariablen AWKLIBPATH nach der Bibliothek gesucht. Wenn die erste Suche fehlschlägt, wird ein weiterer Versuch unternommen, nachdem das standardmäßige Suffix der gemeinsam genutzten Bibliothek für die Plattform angehängt wurde. Es wird erwartet, dass die Bibliotheksinitialisierungsroutine den Namen dl_load() trägt.

-L [value], - -lint[=value]

Geben Sie Warnungen zu Konstrukten aus, die zweifelhaft oder nicht auf andere AWK-Implementierungen übertragbar sind. Unter https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options finden Sie eine Liste möglicher Werte für value.

-M,

- -bignum Erzwingt Arithmetik mit beliebiger Genauigkeit für Zahlen. Diese Option hat keine Auswirkung, wenn gawk nicht für die Verwendung der GNU MPFR- und GMP-Bibliotheken kompiliert ist. (In einem solchen Fall gibt gawk eine Warnung aus.)

HINWEIS: Diese Funktion ist auf Bewährung. Der Hauptbetreuer von gawk unterstützt es nicht mehr, obwohl es ein Mitglied des Entwicklungsteams gibt, das dies tut. Wenn sich diese Situation ändert, wird die Funktion aus gawk entfernt.

Legen Sie GAWK_NO_MPFR_WARN in der Umgebung fest, um die Warnung stummzuschalten.

-n,

- -non-decimal-data Erkennt oktale und hexadezimale Werte in Eingabedaten. Benutzen Sie diese Option mit großer Vorsicht!

-N,

- -use-lc-numeric Erzwingt gawk, beim Parsen von Eingabedaten den Dezimalpunkt des Gebietsschemas zu verwenden.

-W nostalgia,

- -nostalgia Bieten Sie langjährigen awk-Benutzern einen Moment der Nostalgie.

-o[file], - -pretty-print[=file]

Geben Sie eine hübsche gedruckte Version des Programms in eine Datei aus. Die Standarddatei ist awkprof.out im aktuellen Verzeichnis. Diese Option impliziert - -no-optimize.

-O,

- -optimize Aktiviert die Standardoptimierungen von gawk für die interne Darstellung des Programms. Diese Option ist standardmäßig aktiviert.

-p[prof-file], - -profile[=prof-file]

Starten Sie eine Profiling-Sitzung und senden Sie die Profiling-Daten an prof-file. Der Standardwert ist awkprof.out im aktuellen Verzeichnis. Das Profil enthält am linken Rand die Anzahl der Ausführungen jeder Anweisung im Programm und die Anzahl der Funktionsaufrufe für jede benutzerdefinierte Funktion. Gawk läuft in diesem Modus langsamer. Diese Option impliziert - -no-optimize.

-P,

- -posix Dadurch wird der Kompatibilitätsmodus aktiviert und eine Reihe gängiger Erweiterungen deaktiviert.

-r,

- -re-interval Aktivieren Sie die Verwendung von Intervallausdrücken beim Vergleich regulärer Ausdrücke. Intervallausdrücke sind standardmäßig aktiviert, diese Option bleibt jedoch aus Gründen der Abwärtskompatibilität bestehen.

-s,

- -no-optimize Deaktiviert die Standardoptimierungen von gawk für die interne Darstellung des Programms.

-S,

- -sandbox Führen Sie gawk im Sandbox-Modus aus und deaktivieren Sie die Funktion system(), Eingabeumleitung mit getline, Ausgabe Umleitung mit print und printf und Laden dynamischer Erweiterungen. Die Befehlsausführung (über Pipelines) ist ebenfalls deaktiviert.

-t,

- -lint-old Bietet Warnungen zu Konstrukten, die nicht auf die Originalversion von UNIX awk portierbar sind.

-V,

- -version Versionsinformationen für diese bestimmte Kopie von gawk in der Standardausgabe drucken. Dies ist nützlich, wenn Sie Fehler melden. Gemäß den GNU Coding Standards führen diese Optionen zu einem sofortigen, erfolgreichen Beenden.

- -

Signalisieren Sie das Ende der Optionen. Dies ist nützlich, damit weitere Argumente für das AWK-Programm selbst mit einem „-“ beginnen können.

Im Kompatibilitätsmodus werden alle anderen Optionen als ungültig gekennzeichnet, ansonsten jedoch ignoriert. Im Normalbetrieb werden unbekannte Optionen, sofern Programmtext bereitgestellt wurde, im Array ARGV zur Verarbeitung an das AWK-Programm übergeben.

Aus Gründen der POSIX-Kompatibilität kann die Option -W verwendet werden, gefolgt vom Namen einer langen Option.

AWK-PROGRAMMAUSFÜHRUNG

Ein AWK-Programm besteht aus einer Folge optionaler Anweisungen, Muster-Aktionsanweisungen und optionaler Funktionsdefinitionen.

@include "filename "
@load "filename "
@namespace "name "
pattern { action statements }
function name(parameter list) { statements }

Gawk liest zunächst die Programmquelle aus den Programmdateien(s), sofern angegeben, aus den Argumenten für - -source oder aus der ersten Nichtdatei -option-Argument in der Befehlszeile. Die Optionen -f und - -source können mehrfach in der Befehlszeile verwendet werden. Gawk liest den Programmtext so, als ob alle Programmdateiens und Befehlszeilen-Quelltexte miteinander verkettet wären.

Darüber hinaus können Zeilen, die mit @include beginnen, verwendet werden, um andere Quelldateien in Ihr Programm einzubinden. Dies entspricht der Verwendung der Option - -include.

Zeilen, die mit @load beginnen, können zum Laden von Erweiterungsfunktionen in Ihr Programm verwendet werden. Dies entspricht der Verwendung der Option - -load.

Die Umgebungsvariable AWKPATH gibt einen Suchpfad an, der beim Suchen von Quelldateien verwendet werden soll, die mit den Optionen -f und - -include benannt sind. Wenn diese Variable nicht vorhanden ist, lautet der Standardpfad ".:/usr/local/share/awk". (Das tatsächliche Verzeichnis kann variieren, abhängig davon, wie gawk erstellt und installiert wurde.) Wenn ein mit der Option -f angegebener Dateiname ein „/“-Zeichen enthält, gibt es keinen Pfad Die Suche wird durchgeführt.

Die Umgebungsvariable AWKLIBPATH gibt einen Suchpfad an, der beim Suchen von Quelldateien verwendet werden soll, die mit der Option - -load benannt sind. Wenn diese Variable nicht vorhanden ist, lautet der Standardpfad "/usr/local/lib/gawk". (Das tatsächliche Verzeichnis kann variieren, je nachdem, wie gawk erstellt und installiert wurde.)

Gawk führt AWK-Programme in der folgenden Reihenfolge aus. Zunächst werden alle über die Option -v angegebenen Variablenzuweisungen durchgeführt. Als nächstes kompiliert gawk das Programm in eine interne Form. Dann führt gawk den Code in der/den BEGIN-Regel(n) (falls vorhanden) aus und fährt dann mit dem Lesen jeder im ARGV genannten Datei fort Array (bis zu ARGV[ARGC-1]). Wenn in der Befehlszeile keine Dateien benannt sind, liest gawk die Standardeingabe.

Wenn ein Dateiname in der Befehlszeile die Form var=val hat, wird er als Variablenzuweisung behandelt. Der Variablen var wird der Wert val zugewiesen. (Dies geschieht, nachdem eine oder mehrere BEGIN-Regeln ausgeführt wurden.)

Wenn der Wert eines bestimmten Elements von ARGV leer ist (""), überspringt gawk ihn.

Wenn für jede Eingabedatei eine BEGINFILE-Regel vorhanden ist, führt gawk den zugehörigen Code aus, bevor der Inhalt der Datei verarbeitet wird. In ähnlicher Weise führt gawk nach der Verarbeitung der Datei den mit den ENDFILE-Regeln verknüpften Code aus.

Für jeden Datensatz in der Eingabe prüft gawk, ob er mit einem Muster im AWK-Programm übereinstimmt. Für jedes Muster, mit dem der Datensatz übereinstimmt, führt gawk die zugehörige Aktion aus. Die Muster werden in der Reihenfolge getestet, in der sie im Programm vorkommen.

Nachdem alle Eingaben erschöpft sind, führt gawk schließlich den Code in der/den END-Regel(n) aus (falls vorhanden).

Befehlszeilenverzeichnisse

Laut POSIX müssen in der Befehlszeile awk benannte Dateien Textdateien sein. Wenn dies nicht der Fall ist, ist das Verhalten „undefiniert“. Die meisten Versionen von awk behandeln ein Verzeichnis in der Befehlszeile als schwerwiegenden Fehler.

Bei gawk erzeugt ein Verzeichnis in der Befehlszeile eine Warnung, wird ansonsten aber übersprungen. Wenn eine der Optionen - -posix oder - -traditional angegeben wird, dann geht gawk dazu über, Verzeichnisse in der Befehlszeile als schwerwiegenden Fehler zu behandeln .

VARIABLEN, AUFZEICHNUNGEN UND FELDER

AWK-Variablen sind dynamisch; Sie entstehen, wenn sie zum ersten Mal verwendet werden. Ihre Werte sind entweder Gleitkommazahlen oder Zeichenfolgen oder beides, je nachdem, wie sie verwendet werden. Darüber hinaus ermöglicht gawk, dass Variablen den Typ „regulärer Ausdruck“ haben. AWK verfügt auch über eindimensionale Arrays; Arrays mit mehreren Dimensionen können simuliert werden. gawk stellt jedoch echte Arrays von Arrays bereit. Während der Programmausführung werden mehrere vordefinierte Variablen festgelegt. Diese werden nach Bedarf beschrieben und im Folgenden zusammengefasst.

Aufzeichnungen

Normalerweise werden Datensätze durch Newline-Zeichen getrennt. Sie können steuern, wie Datensätze getrennt werden, indem Sie der integrierten Variablen RS Werte zuweisen. Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Records.html.

Felder

Wenn jeder Eingabedatensatz gelesen wird, teilt gawk den Datensatz in Felder auf und verwendet dabei den Wert der FS-Variablen als Feldtrennzeichen. Darüber hinaus können FIELDWIDTHS und FPAT verwendet werden, um die Aufteilung von Eingabefeldern zu steuern. Weitere Informationen finden Sie ab https://www.gnu.org/software/gawk/manual/html_node/Fields.html.

Auf jedes Feld im Eingabedatensatz kann anhand seiner Position verwiesen werden: $1, $2 usw. $0 ist der gesamte Datensatz, einschließlich führender und nachfolgender Leerzeichen.

Die Variable NF wird auf die Gesamtzahl der Felder im Eingabedatensatz gesetzt.

Verweise auf nicht vorhandene Felder (d. h. Felder nach $NF) erzeugen die Nullzeichenfolge. Die Zuweisung zu einem nicht vorhandenen Feld (z. B. $ (NF+2)=5) erhöht jedoch den Wert von NF und erstellt alle dazwischen liegenden Felder mit Null Zeichenfolge als ihre Werte und bewirkt, dass der Wert von $0 neu berechnet wird, wobei die Felder durch den Wert von OFS getrennt werden. Verweise auf negativ nummerierte Felder führen zu einem schwerwiegenden Fehler. Durch die Dekrementierung von NF gehen die Werte von Feldern über dem neuen Wert verloren und der Wert von $0 wird neu berechnet, wobei die Felder durch den Wert von getrennt werden OFS.

Wenn Sie einem vorhandenen Feld einen Wert zuweisen, wird der gesamte Datensatz neu erstellt, wenn auf $0 verwiesen wird. Ebenso führt die Zuweisung eines Werts zu $0 dazu, dass der Datensatz erneut aufgeteilt wird, wodurch neue Werte für die Felder erstellt werden.

Integrierte Variablen

Die integrierten Variablen von Gawk  sind unten aufgeführt. Diese Liste ist absichtlich knapp gehalten. Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.

ARGC

Die Anzahl der Befehlszeilenargumente.

ARGIND

Der Index in ARGV der aktuell verarbeiteten Datei.

ARGV

Array von Befehlszeilenargumenten. Das Array ist von 0 bis ARGC - 1 indiziert.

BINMODE

Gibt auf Nicht-POSIX-Systemen die Verwendung des „Binär“-Modus für alle Datei-E/A an. Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html.

CONVFMT

Das Konvertierungsformat für Zahlen ist standardmäßig „%.6g“.

ENVIRON

Ein Array, das die Werte der aktuellen Umgebung enthält. Das Array wird durch die Umgebungsvariablen indiziert, wobei jedes Element den Wert dieser Variablen darstellt.

ERRNO

Wenn ein Systemfehler auftritt, entweder bei der Umleitung für getline, während eines Lesevorgangs für getline oder während eines close(), dann ERRNO wird auf eine Zeichenfolge gesetzt, die den Fehler beschreibt. Der Wert kann in nicht-englischen Sprachen übersetzt werden.

FIELDWIDTHS

Eine durch Leerzeichen getrennte Liste von Feldbreiten. Wenn diese Option festgelegt ist, analysiert gawk die Eingabe in Felder mit fester Breite, anstatt den Wert der Variablen FS als Feldtrennzeichen zu verwenden. Jeder Feldbreite kann optional ein durch Doppelpunkte getrennter Wert vorangestellt werden, der die Anzahl der Zeichen angibt, die übersprungen werden sollen, bevor das Feld beginnt.

FILENAME

Der Name der aktuellen Eingabedatei. Wenn in der Befehlszeile keine Dateien angegeben sind, ist der Wert von FILENAME „-“. Allerdings ist FILENAME innerhalb der BEGIN-Regel nicht definiert (sofern nicht durch getline festgelegt).

FNR

Die Nummer des Eingabedatensatzes in der aktuellen Eingabedatei.

FPAT

Ein regulärer Ausdruck, der den Inhalt der Felder in einem Datensatz beschreibt. Wenn diese Option festgelegt ist, analysiert gawk die Eingabe in Felder, wobei die Felder mit dem regulären Ausdruck übereinstimmen, anstatt den Wert von FS als Feldtrennzeichen zu verwenden.

FS

Das Eingabefeldtrennzeichen, standardmäßig ein Leerzeichen. Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html.

FUNCTAB

Ein Array, dessen Indizes und entsprechende Werte die Namen aller benutzerdefinierten oder Erweiterungsfunktionen im Programm sind. HINWEIS: Sie dürfen die delete-Anweisung nicht mit dem FUNCTAB-Array verwenden.

IGNORECASE

Steuert die Groß-/Kleinschreibung aller regulären Ausdrucks- und Zeichenfolgenoperationen. Weitere Informationen finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html.

LINT

Bietet dynamische Steuerung der Option - -lint innerhalb eines AWK-Programms.

NF

Die Anzahl der Felder im aktuellen Eingabedatensatz.

NR

Die Gesamtzahl der bisher gesehenen Eingabedatensätze.

OFMT

Das Ausgabeformat für Zahlen ist standardmäßig „%.6g“.

OFS

Das Ausgabefeldtrennzeichen, standardmäßig ein Leerzeichen.

ORS

Das Trennzeichen für den Ausgabedatensatz, standardmäßig eine neue Zeile.

PREC

Die Arbeitsgenauigkeit von Gleitkommazahlen beliebiger Genauigkeit, standardmäßig 53.

PROCINFO

Die Elemente dieses Arrays ermöglichen den Zugriff auf Informationen über das laufende AWK-Programm. Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset.

ROUNDMODE

Der Rundungsmodus, der für die Arithmetik mit beliebiger Genauigkeit für Zahlen verwendet werden soll, standardmäßig "N" (IEEE-754-RoundTiesToEven-Modus). Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode.

RS

Das Trennzeichen für den Eingabedatensatz, standardmäßig eine neue Zeile.

RT

Der Datensatzterminator. Gawk setzt RT auf den Eingabetext, der mit dem durch RS angegebenen Zeichen oder regulären Ausdruck übereinstimmt.

RSTART

Der Index des ersten Zeichens, mit dem match() übereinstimmt; 0, wenn keine Übereinstimmung vorhanden ist.

RLENGTH

Die Länge der Zeichenfolge, die mit match() übereinstimmt; -1, wenn keine Übereinstimmung vorhanden ist.

SUBSEP

Die Zeichenfolge, die zum Trennen mehrerer Indizes in Array-Elementen verwendet wird, standardmäßig "\034".

SYMTAB

Ein Array, dessen Indizes die Namen aller aktuell definierten globalen Variablen und Arrays im Programm sind. Sie dürfen die delete-Anweisung nicht mit dem SYMTAB-Array verwenden oder Elementen zuweisen, deren Index kein Variablenname ist.

TEXTDOMAIN

Die Textdomäne des AWK-Programms; Wird verwendet, um die lokalisierten Übersetzungen für die Zeichenfolgen des Programms zu finden.

Arrays

Arrays werden mit einem Ausdruck in eckigen Klammern tiefgestellt ([ und ]). Wenn der Ausdruck eine Ausdrucksliste ist (expr, expr . . .), dann ist der Array-Index eine Zeichenfolge, die aus der Verkettung des (Zeichenfolgen-)Werts jedes Ausdrucks besteht. getrennt durch den Wert der Variablen SUBSEP. Mit dieser Funktion können mehrfach dimensionierte Arrays simuliert werden. Zum Beispiel:

i = "A";  j = "B";  k = "C"
x[i, j, k] = "hello, world\n"

weist die Zeichenfolge "hello, world\n" dem Element des Arrays x zu, das durch die Zeichenfolge "A\034B\034C" indiziert ist . Alle Arrays in AWK sind assoziativ, d. h. durch Stringwerte indiziert.

Der spezielle Operator in kann verwendet werden, um zu testen, ob ein Array einen Index hat, der aus einem bestimmten Wert besteht:

if (val in array)
	print array[val]

Wenn das Array mehrere Indizes hat, verwenden Sie (i, j) im Array.

Das in-Konstrukt kann auch in einer for-Schleife verwendet werden, um alle Elemente eines Arrays zu durchlaufen. Allerdings funktioniert das Konstrukt (i, j) in array nur in Tests, nicht in for-Schleifen.

Mit der delete-Anweisung kann ein Element aus einem Array gelöscht werden. Die delete-Anweisung kann auch verwendet werden, um den gesamten Inhalt eines Arrays zu löschen, indem einfach der Array-Name ohne Index angegeben wird.

gawk unterstützt echte mehrdimensionale Arrays. Es ist nicht erforderlich, dass solche Arrays „rechteckig“ sind wie in C oder C++. Weitere Informationen finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Arrays.

Namensräume

Gawk bietet eine einfache Namespace-Funktion, um die Tatsache zu umgehen, dass alle Variablen in AWK global sind.

Ein qualifizierter Name besteht aus zwei einfachen Bezeichnern, die durch einen Doppelpunkt (::) verbunden sind. Der linke Bezeichner stellt den Namespace dar und der rechte Bezeichner ist die darin enthaltene Variable. Alle einfachen (nicht qualifizierten) Namen gelten als im „aktuellen“ Namensraum liegend; Der Standard-Namespace ist awk. Allerdings werden einfache Bezeichner, die ausschließlich aus Großbuchstaben bestehen, in den awk-Namespace gezwungen, auch wenn der aktuelle Namespace ein anderer ist.

Sie ändern den aktuellen Namespace mit einer @namespace "name "-Direktive.

Die standardmäßig vordefinierten integrierten Funktionsnamen dürfen nicht als Namespace-Namen verwendet werden. Die Namen zusätzlicher Funktionen, die von gawk bereitgestellt werden, können als Namespace-Namen oder als einfache Bezeichner in anderen Namespaces verwendet werden. Weitere Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.

Variablentypisierung und -konvertierung

Variablen und Felder können (Gleitkomma-)Zahlen oder Zeichenfolgen oder beides sein. Es kann sich auch um reguläre Ausdrücke handeln. Wie der Wert einer Variablen interpretiert wird, hängt von ihrem Kontext ab. Wenn es in einem numerischen Ausdruck verwendet wird, wird es als Zahl behandelt; Wenn es als Zeichenfolge verwendet wird, wird es als Zeichenfolge behandelt.

Um zu erzwingen, dass eine Variable als Zahl behandelt wird, fügen Sie Null hinzu. Um zu erzwingen, dass es als Zeichenfolge behandelt wird, verketten Sie es mit der Nullzeichenfolge.

Nicht initialisierte Variablen haben den numerischen Wert Null und den Zeichenfolgenwert „“ (die Null- oder leere Zeichenfolge).

Wenn eine Zeichenfolge in eine Zahl umgewandelt werden muss, erfolgt die Umwandlung mit strtod(3). Eine Zahl wird in eine Zeichenfolge umgewandelt, indem der Wert von CONVFMT als Formatzeichenfolge für sprintf(3) verwendet wird, mit dem numerischen Wert der Variablen als Argument. Obwohl jedoch alle Zahlen in AWK Gleitkommazahlen sind, werden ganzzahlige Werte immer in ganze Zahlen konvertiert.

Gawk führt Vergleiche wie folgt durch: Wenn zwei Variablen numerisch sind, werden sie numerisch verglichen. Wenn ein Wert numerisch ist und der andere einen Zeichenfolgewert hat, der eine „numerische Zeichenfolge“ ist, werden Vergleiche ebenfalls numerisch durchgeführt. Andernfalls wird der numerische Wert in einen String umgewandelt und ein String-Vergleich durchgeführt. Zwei Strings werden natürlich als Strings verglichen.

Beachten Sie, dass String-Konstanten wie "57" keine numerischen Strings, sondern String-Konstanten sind. Die Idee einer „numerischen Zeichenfolge“ gilt nur für Felder, getline-Eingaben, FILENAME-, ARGV-Elemente und ENVIRON-Elemente und die Elemente eines Arrays, das durch split() oder patsplit() erstellt wurde und numerische Zeichenfolgen sind. Die Grundidee besteht darin, dass Benutzereingaben und nur Benutzereingaben, die numerisch aussehen, auf diese Weise behandelt werden sollten.

Oktale und hexadezimale Konstanten

Sie können in Ihrem AWK-Programmquellcode oktale und hexadezimale Konstanten im C-Stil verwenden. Beispielsweise entspricht der Oktalwert 011 der Dezimalzahl 9 und der Hexadezimalwert 0x11 entspricht der Dezimalzahl 17.

String-Konstanten

String-Konstanten in AWK sind Zeichenfolgen, die in doppelte Anführungszeichen eingeschlossen sind (wie "value"). Innerhalb von Strings werden bestimmte Escape-Sequenzen erkannt, wie in C. Siehe https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences für die Details.

Regexp-Konstanten

Eine Konstante eines regulären Ausdrucks ist eine Folge von Zeichen, die von Schrägstrichen umgeben sind (z. B. /value/).

Die im Handbuch beschriebenen Escape-Sequenzen können auch innerhalb konstanter regulärer Ausdrücke verwendet werden (z. B. entspricht /[ \t\f\n\r\v]/ Leerzeichen).

Gawk bietet stark typisierte Konstanten für reguläre Ausdrücke. Diese werden mit einem führenden @-Symbol geschrieben (z. B. @/value/). Solche Konstanten können Skalaren (Variablen, Array-Elementen) zugewiesen und an benutzerdefinierte Funktionen übergeben werden. Variablen, die so zugewiesen wurden, haben den Typ regulärer Ausdruck.

MUSTER UND AKTIONEN

AWK ist eine zeilenorientierte Sprache. Zuerst kommt das Muster und dann die Aktion. Aktionsanweisungen sind in { und eingeschlossen. Entweder fehlt das Muster oder die Aktion, aber natürlich nicht beides. Fehlt das Muster, wird die Aktion für jeden einzelnen Eingabedatensatz ausgeführt. Eine fehlende Aktion ist gleichbedeutend mit

{ print }

Dadurch wird der gesamte Datensatz gedruckt.

Kommentare beginnen mit dem Zeichen # und dauern bis zum Ende der Zeile. Zur Trennung von Anweisungen können Leerzeilen verwendet werden. Normalerweise endet eine Anweisung mit einer neuen Zeile. Dies ist jedoch nicht der Fall für Zeilen, die mit einem Komma, {, ?, :, enden. && oder ||. Auch bei Zeilen, die mit do oder else enden, werden die Anweisungen automatisch in der folgenden Zeile fortgesetzt. In anderen Fällen kann eine Zeile fortgesetzt werden, indem man sie mit einem „\“ beendet. In diesem Fall wird der Zeilenumbruch ignoriert. Allerdings ist ein „\“ nach einem # nichts Besonderes.

Mehrere Anweisungen können in einer Zeile zusammengefasst werden, indem sie durch ein „;“ getrennt werden. “. Dies gilt sowohl für die Anweisungen innerhalb des Aktionsteils eines Muster-Aktions-Paares (der übliche Fall) als auch für die Muster-Aktions-Anweisungen selbst.

Muster

AWK-Muster können eines der folgenden sein:

BEGIN
END
BEGINFILE
ENDFILE
/regular expression/
relational expression
pattern && pattern
pattern || pattern
pattern ? pattern : pattern
(pattern)
! pattern
pattern1, pattern2

BEGIN und END sind zwei spezielle Arten von Mustern, die nicht anhand der Eingabe getestet werden. Die Aktionsteile aller BEGIN-Muster werden so zusammengeführt, als wären alle Anweisungen in einer einzigen BEGIN-Regel geschrieben worden. Sie werden ausgeführt, bevor eine der Eingaben gelesen wird. Ebenso werden alle END-Regeln zusammengeführt und ausgeführt, wenn die gesamte Eingabe erschöpft ist (oder wenn eine exit-Anweisung ausgeführt wird). Die Muster BEGIN und END können nicht mit anderen Mustern in Musterausdrücken kombiniert werden. In den Mustern BEGIN und END dürfen keine Aktionsteile fehlen.

BEGINFILE und ENDFILE sind zusätzliche spezielle Muster, deren Aktionen vor dem Lesen des ersten Datensatzes jeder Befehlszeilen-Eingabedatei und nach dem Lesen des letzten Datensatzes jeder Datei ausgeführt werden. Innerhalb der BEGINFILE-Regel ist der Wert von ERRNO die leere Zeichenfolge, wenn die Datei erfolgreich geöffnet wurde. Andernfalls liegt ein Problem mit der Datei vor und der Code sollte nextfile verwenden, um es zu überspringen. Geschieht dies nicht, erzeugt gawk den üblichen schwerwiegenden Fehler für Dateien, die nicht geöffnet werden können.

Bei /regulären Ausdrücken/-Mustern wird die zugehörige Anweisung für jeden Eingabedatensatz ausgeführt, der mit dem regulären Ausdruck übereinstimmt. Reguläre Ausdrücke sind im Wesentlichen dieselben wie die in egrep(1). Einzelheiten zu regulären Ausdrücken finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Regexp.html.

Ein relationaler Ausdruck kann jeden der unten im Abschnitt über Aktionen definierten Operatoren verwenden. Diese testen im Allgemeinen, ob bestimmte Felder mit bestimmten regulären Ausdrücken übereinstimmen.

Die Operatoren &&, || und ! sind logisches UND, logisches ODER bzw. logisches NICHT, wie in C. Sie sind kurz -Schaltungsauswertung, ebenfalls wie in C, und werden zum Kombinieren primitiverer Musterausdrücke verwendet. Wie in den meisten Sprachen können Klammern verwendet werden, um die Reihenfolge der Auswertung zu ändern.

Der ? Der Operator : ähnelt dem gleichen Operator in C. Wenn das erste Muster wahr ist, ist das zum Testen verwendete Muster das zweite Muster, andernfalls das dritte. Nur eines der zweiten und dritten Muster wird ausgewertet.

Die Form pattern1, pattern2 eines Ausdrucks wird als Bereichsmuster bezeichnet. Es gleicht alle Eingabedatensätze ab, beginnend mit einem Datensatz, der mit pattern1 übereinstimmt, bis hin zu einem Datensatz, der mit pattern2 übereinstimmt. Es lässt sich nicht mit anderen Musterausdrücken kombinieren.

Aktionen

Aktionsanweisungen werden in geschweifte Klammern eingeschlossen, { und }. Aktionsanweisungen bestehen aus den üblichen Zuweisungs-, Bedingungs- und Schleifenanweisungen, die in den meisten Sprachen zu finden sind. Die verfügbaren Operatoren, Steueranweisungen und Eingabe-/Ausgabeanweisungen sind denen in C nachempfunden.

Betreiber

Die Operatoren in AWK sind in der Reihenfolge absteigender Priorität:

(. . .)

Gruppierung

$

Feldreferenz.

++ - -

Inkrementieren und Dekrementieren, sowohl Präfix als auch Postfix.

^

Potenzierung.

+ - !

Unäres Plus, unäres Minus und logische Negation.

* / %

Multiplikation, Division und Modul.

+ -

Addition und Subtraktion.

space

String-Verkettung.

| |&

Über Pipe geleitete E/A für getline, print und printf.

< > <= >= == !=

Die regulären Vergleichsoperatoren.

~ !~

Übereinstimmung mit regulären Ausdrücken, negierte Übereinstimmung.

in

Array-Mitgliedschaft.

&&

Logisches UND.

||

Logisches ODER.

?:

Der C-bedingte Ausdruck. Dies hat die Form expr1 ? expr2 : expr3 . Wenn expr1 wahr ist, ist der Wert des Ausdrucks expr2, andernfalls ist er expr3. Es wird nur einer von expr2 und expr3 ausgewertet.

= += -= *= /= %= ^=

Abtretung. Sowohl die absolute Zuweisung (var=value) als auch die Operatorzuweisung (die andere Formulare) werden unterstützt.

Kontrollanweisungen

Die Steueranweisungen lauten wie folgt:

if (condition) statement [ else statement ]
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
delete array [ index ]
delete array 
exit [ expression ]
{ statements }
switch (expression) {
case value|regex : statement
. . .
[ default: statement ]
}

I/O-Anweisungen

Die Eingabe-/Ausgabeanweisungen lauten wie folgt:

close(file [, how])

Schließen Sie eine geöffnete Datei, Pipe oder einen Coprozess. Das optionale how sollte nur verwendet werden, wenn ein Ende einer Zwei-Wege-Pipe zu einem Coprozess geschlossen wird. Es muss ein Zeichenfolgenwert sein, entweder "to" oder "from".

getline

Setze $0 ab dem nächsten Eingabedatensatz; setze NF, NR, FNR, RT.

getline <file

Setze $0 ab dem nächsten Datensatz von file; setze NF, RT.

getline var

Setze var ab dem nächsten Eingabedatensatz; setze NR, FNR, RT.

getline var <file

Setze var aus dem nächsten Datensatz von file; setze RT.

command | getline [var]

Führen Sie command aus und leiten Sie die Ausgabe wie oben entweder an $0 oder var und an RT weiter.

command |& getline [var]

Führen Sie command als Coprozess aus und leiten Sie die Ausgabe entweder an $0 oder var, wie oben, und an RT weiter. (Der Befehl kann auch ein Socket sein. Siehe den Unterabschnitt Spezielle Dateinamen weiter unten.)

fflush([file ])

Leeren Sie alle Puffer, die mit der geöffneten Ausgabedatei oder Pipe-Datei verknüpft sind. Wenn file fehlt oder es sich um eine Nullzeichenfolge handelt, leeren Sie alle offenen Ausgabedateien und Pipes.

next

Stoppen Sie die Verarbeitung des aktuellen Eingabedatensatzes. Lesen Sie den nächsten Eingabedatensatz und beginnen Sie mit der Verarbeitung erneut mit dem ersten Muster im AWK-Programm. Wenn Sie das Ende der Eingabedaten erreichen, führen Sie alle END-Regeln aus.

nextfile

Stoppen Sie die Verarbeitung der aktuellen Eingabedatei. Der nächste gelesene Eingabedatensatz stammt aus der nächsten Eingabedatei. Aktualisieren Sie FILENAME und ARGIND, setzen Sie FNR auf 1 zurück und beginnen Sie mit der Verarbeitung erneut mit dem ersten Muster im AWK-Programm. Wenn Sie das Ende der Eingabedaten erreichen, führen Sie alle ENDFILE- und END-Regeln aus.

print

Drucken Sie den aktuellen Datensatz. Der Ausgabesatz wird mit dem Wert ORS abgeschlossen.

print expr-list

Ausdrücke drucken. Jeder Ausdruck wird durch den Wert von OFS getrennt. Der Ausgabesatz wird mit dem Wert ORS abgeschlossen.

print expr-list >file

Ausdrücke in Datei drucken. Jeder Ausdruck wird durch den Wert von OFS getrennt. Der Ausgabesatz wird mit dem Wert ORS abgeschlossen.

printf fmt, expr-list

Formatieren und drucken.

printf fmt, expr-list >file

Formatieren und in Datei drucken.

system(cmd-line)

Führen Sie den Befehl cmd-line aus und geben Sie den Exit-Status zurück. (Dies ist möglicherweise auf Nicht-POSIX-Systemen nicht verfügbar.) Siehe https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions für Ausführliche Informationen zum Exit-Status.

Für print und printf sind zusätzliche Ausgabeumleitungen zulässig.

print . . . >> file

Hängen Sie die Ausgabe an die Datei an.

print . . . | command

Schreiben Sie auf eine Pfeife.

print . . . |& command

Senden Sie Daten an einen Coprozess oder Socket. (Siehe auch den Unterabschnitt Spezielle Dateinamen weiter unten.)

Der Befehl getline gibt 1 bei Erfolg, Null am Ende der Datei und -1 bei einem Fehler zurück. Wenn der Wert errno(3) angibt, dass der E/A-Vorgang wiederholt werden kann und PROCINFO["input ", " RETRY"] gesetzt ist, wird -2 anstelle von -1 zurückgegeben und es können weitere Aufrufe von getline versucht werden. Bei einem Fehler wird ERRNO auf eine Zeichenfolge gesetzt, die das Problem beschreibt.

HINWEIS: Wenn beim Öffnen eines bidirektionalen Sockets ein Fehler auftritt, wird ein nicht schwerwiegender Fehler an die aufrufende Funktion zurückgegeben. Wenn Sie eine Pipe, einen Coprozess oder einen Socket für getline oder von print oder printf innerhalb einer Schleife verwenden, müssen Sie dies tun > Verwenden Sie close(), um neue Instanzen des Befehls oder Sockets zu erstellen. AWK schließt Pipes, Sockets oder Coprozesse nicht automatisch, wenn sie EOF zurückgeben.

Die AWK-Versionen der printf-Anweisung und der sprintf()-Funktion ähneln denen von C. Einzelheiten finden Sie unter https://www.gnu.org/ software/gawk/manual/html_node/Printf.html.

Spezielle Dateinamen

Wenn Sie eine E/A-Umleitung von print oder printf in eine Datei oder über getline aus einer Datei durchführen, gawk erkennt intern bestimmte spezielle Dateinamen. Diese Dateinamen ermöglichen den Zugriff auf offene Dateideskriptoren, die vom übergeordneten Prozess von gawk  (normalerweise der Shell) geerbt wurden. Diese Dateinamen können auch in der Befehlszeile zum Benennen von Datendateien verwendet werden. Die Dateinamen sind:

-

Die Standardeingabe.

/dev/stdin

Die Standardeingabe.

/dev/stdout

Die Standardausgabe.

/dev/stderr

Die Standardfehlerausgabe.

/dev/fd/ n

Die mit dem offenen Dateideskriptor n verknüpfte Datei.

Die folgenden speziellen Dateinamen können mit dem Coprozessoperator |& zum Erstellen von TCP/IP-Netzwerkverbindungen verwendet werden:

/inet/tcp/lport/rhost/rport
/inet4/tcp/lport/rhost/rport
/inet6/tcp/lport/rhost/rport

Dateien für eine TCP/IP-Verbindung am lokalen Port lport zum Remote-Host rhost am Remote-Port rport. Verwenden Sie einen Port von 0, damit das System einen Port auswählt. Verwenden Sie /inet4, um eine IPv4-Verbindung zu erzwingen, und /inet6, um eine IPv6-Verbindung zu erzwingen. Plain /inet verwendet den Systemstandard (höchstwahrscheinlich IPv4). Nur mit dem bidirektionalen I/O-Operator |& verwendbar.

/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport

Ähnlich, aber verwenden Sie UDP/IP anstelle von TCP/IP.

Numerische Funktionen

AWK verfügt über die folgenden integrierten Rechenfunktionen:

atan2(y, x)

Gibt den Arkustangens von y/x im Bogenmaß zurück.

cos(expr)

Gibt den Kosinus von expr zurück, der im Bogenmaß angegeben ist.

exp(expr)

Die Exponentialfunktion.

int(expr)

Auf Ganzzahl kürzen.

intdiv(num, denom, result)

Kürzen Sie num und denom auf ganze Zahlen. Geben Sie den Quotienten von num dividiert durch denom in result["quotient"] und den Rest in zurück Ergebnis["Rest"]. Dies ist eine gawk-Erweiterung, die vor allem bei der Arbeit mit beliebig großen Ganzzahlen von Nutzen ist.

log(expr)

Die natürliche Logarithmusfunktion.

rand()

Gibt eine Zufallszahl N zwischen Null und Eins zurück, sodass 0 ≤ N < 1 ist.

sin(expr)

Gibt den Sinus von expr zurück, der im Bogenmaß angegeben ist.

sqrt(expr)

Gibt die Quadratwurzel von expr zurück.

srand([expr ])

Verwenden Sie expr als neuen Startwert für den Zufallszahlengenerator. Wenn kein expr angegeben ist, verwenden Sie die Tageszeit. Gibt den vorherigen Startwert für den Zufallszahlengenerator zurück.

String-Funktionen

Gawk verfügt über die folgenden integrierten String-Funktionen; Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/String-Functions.

asort(s [, d [, how] ])

Gibt die Anzahl der Elemente im Quellarray s zurück. Sortieren Sie den Inhalt von s nach den normalen Regeln von gawk  zum Vergleichen von Werten und ersetzen Sie die Indizes der sortierten Werte s durch sequentielle Ganzzahlen, beginnend mit 1. Wenn das optionale Zielarray d angegeben ist, duplizieren Sie zuerst s in d und sortieren Sie dann d. Die Indizes des Quellarrays s bleiben unverändert. Die optionale Zeichenfolge how steuert die Richtung und den Vergleichsmodus. Gültige Werte für wie werden unter https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions beschrieben. s und d dürfen dasselbe Array sein; Dies macht nur dann Sinn, wenn auch das dritte Argument angegeben wird.

asorti(s [, d [, how] ])

Gibt die Anzahl der Elemente im Quellarray s zurück. Das Verhalten ist das gleiche wie bei asort(), außer dass die Array-indizes zum Sortieren verwendet werden, nicht die Array-Werte. Anschließend wird das Array numerisch indiziert und die Werte entsprechen denen der ursprünglichen Indizes. Die ursprünglichen Werte gehen verloren; Stellen Sie daher ein zweites Array bereit, wenn Sie das Original beibehalten möchten. Der Zweck der optionalen Zeichenfolge how ist derselbe wie für asort(). Auch hier dürfen s und d dasselbe Array sein; Dies macht nur dann Sinn, wenn auch das dritte Argument angegeben wird.

gensub(r, s, h [, t])

Durchsuchen Sie die Zielzeichenfolge t nach Übereinstimmungen mit dem regulären Ausdruck r. Wenn h eine Zeichenfolge ist, die mit g oder G beginnt, dann ersetzen Sie alle Übereinstimmungen von r durch s . Andernfalls ist h eine Zahl, die angibt, welche Übereinstimmung von r ersetzt werden soll. Wenn t nicht angegeben ist, verwenden Sie stattdessen $0. Innerhalb des Ersetzungstextes s kann die Sequenz \n, verwendet werden, wobei n eine Ziffer von 1 bis 9 ist kann verwendet werden, um nur den Text anzugeben, der mit dem n-ten Unterausdruck in Klammern übereinstimmt. Die Sequenz \0 stellt den gesamten übereinstimmenden Text dar, ebenso wie das Zeichen &. Im Gegensatz zu sub() und gsub() wird die geänderte Zeichenfolge als Ergebnis der Funktion zurückgegeben und die ursprüngliche Zielzeichenfolge wird nicht geändert .

gsub(r, s [, t])

Ersetzen Sie für jede Teilzeichenfolge, die mit dem regulären Ausdruck r in der Zeichenfolge t übereinstimmt, die Zeichenfolge s und geben Sie die Anzahl der Ersetzungen zurück. Wenn t nicht angegeben ist, verwenden Sie $0. Ein & im Ersetzungstext wird durch den tatsächlich passenden Text ersetzt. Verwenden Sie \&, um ein Literal & zu erhalten. (Dies muss als "\\&" eingegeben werden; siehe https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details für eine ausführlichere Diskussion der Regeln für kaufmännische Und-Zeichen und Backslashes im Ersetzungstext von sub(), gsub() und gensub()<.)

index(s, t)

Gibt den Index der Zeichenfolge t in der Zeichenfolge s zurück, oder Null, wenn t nicht vorhanden ist. (Dies bedeutet, dass Zeichenindizes bei eins beginnen.)

length([s])

Gibt die Länge der Zeichenfolge s oder die Länge von $0 zurück, wenn s nicht angegeben wird. Bei einem Array-Argument gibt length() die Anzahl der Elemente im Array zurück.

match(s, r [, a])

Geben Sie die Position in s zurück, an der der reguläre Ausdruck r auftritt, oder Null, wenn r nicht vorhanden ist, und legen Sie die Werte von RSTART fest und RLENGTH. Beachten Sie, dass die Reihenfolge der Argumente dieselbe ist wie für den Operator ~: str ~ re.

Unter https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions finden Sie eine Beschreibung, wie das Array a ist ist ausgefüllt, sofern vorhanden.

patsplit(s, a [, r [, seps] ])

Teilen Sie die Zeichenfolge s in das Array a und das Trennzeichenarray seps für den regulären Ausdruck r auf und geben Sie das zurück Anzahl der Felder. Elementwerte sind die Teile von s, die mit r übereinstimmten. Der Wert von seps[i] ist das möglicherweise Null-Trennzeichen, das nach a[i erschien ]. Der Wert von seps[0] ist das möglicherweise nullführende Trennzeichen. Wenn r weggelassen wird, wird stattdessen FPAT verwendet. Zuerst werden die Arrays a und seps gelöscht. Die Aufteilung verhält sich identisch zur Feldaufteilung mit FPAT.

split(s, a [, r [, seps] ])

Teilen Sie die Zeichenfolge s in das Array a und das Trennzeichenarray seps für den regulären Ausdruck r auf und geben Sie das zurück Anzahl der Felder. Wenn r weggelassen wird, wird stattdessen FS verwendet. Zuerst werden die Arrays a und seps gelöscht. seps[i] ist das Feldtrennzeichen, das mit r zwischen a[<> übereinstimmti] und a[i+1]. Die Aufteilung verhält sich identisch zur Feldaufteilung .

sprintf(fmt , expr-list )

Drucken Sie expr-list gemäß fmt und geben Sie die resultierende Zeichenfolge zurück.

strtonum(str)

Untersuchen Sie str und geben Sie seinen numerischen Wert zurück. Wenn str mit einer führenden 0 beginnt, behandeln Sie es als Oktalzahl. Wenn str mit einem führenden 0x oder 0X beginnt, behandeln Sie es als Hexadezimalzahl. Andernfalls gehen wir davon aus, dass es sich um eine Dezimalzahl handelt.

sub(r, s [, t])

Genau wie gsub(), aber nur den ersten passenden Teilstring ersetzen. Gibt entweder Null oder Eins zurück.

substr(s, i [, n])

Gibt die höchstens n-stellige Teilzeichenfolge von s zurück, beginnend bei i. Wenn n weggelassen wird, verwenden Sie den Rest von s.

tolower(str)

Gibt eine Kopie der Zeichenfolge str zurück, wobei alle Großbuchstaben in str in die entsprechenden Kleinbuchstaben übersetzt werden. Nicht-alphabetische Zeichen bleiben unverändert.

toupper(str)

Gibt eine Kopie der Zeichenfolge str zurück, wobei alle Kleinbuchstaben in str in ihre entsprechenden Gegenstücke in Großbuchstaben übersetzt werden. Nicht-alphabetische Zeichen bleiben unverändert.

Gawk ist Multibyte-fähig. Das bedeutet, dass index(), length(), substr() und match() alle in Termen funktionieren von Zeichen, nicht von Bytes.

Zeitfunktionen

Gawk bietet die folgenden Funktionen zum Abrufen und Formatieren von Zeitstempeln. Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.

mktime(datespec [, utc-flag])

Wandeln Sie datespec in einen Zeitstempel derselben Form um, die von systime() zurückgegeben wird, und geben Sie das Ergebnis zurück. Wenn utc-flag vorhanden und ungleich Null oder nicht null ist, wird davon ausgegangen, dass die Zeit in der UTC-Zeitzone liegt; andernfalls wird davon ausgegangen, dass die Zeit in der lokalen Zeitzone liegt. Wenn datespec nicht genügend Elemente enthält oder die resultierende Zeit außerhalb des zulässigen Bereichs liegt, gibt mktime() -1 zurück. Einzelheiten zu datespec finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions.

strftime([format [, timestamp[, utc-flag]]])

Formatieren Sie den Zeitstempel gemäß der Spezifikation im Format. Wenn utc-flag vorhanden und ungleich Null oder nicht null ist, erfolgt das Ergebnis in UTC, andernfalls in Ortszeit. Der Zeitstempel sollte die gleiche Form haben wie der von systime() zurückgegebene. Fehlt Zeitstempel, wird die aktuelle Tageszeit verwendet. Wenn format fehlt, wird ein Standardformat verwendet, das der Ausgabe von date(1) entspricht. Das Standardformat ist in PROCINFO["strftime"] verfügbar. Informationen zu den Formatkonvertierungen, die garantiert verfügbar sind, finden Sie in der Spezifikation für die Funktion strftime() in ISO C.

systime()

Gibt die aktuelle Tageszeit als Anzahl der Sekunden seit der Epoche zurück (1970-01-01 00:00:00 UTC auf POSIX-Systemen).

Bitmanipulationsfunktionen

Gawk stellt die folgenden Bitmanipulationsfunktionen bereit. Sie funktionieren, indem sie Gleitkommawerte mit doppelter Genauigkeit in uintmax_t-Ganzzahlen konvertieren, die Operation ausführen und das Ergebnis dann wieder in Gleitkommazahlen umwandeln. Die Übergabe negativer Operanden an eine dieser Funktionen führt zu einem schwerwiegenden Fehler.

Die Funktionen sind:

and(v1, v2 [, ...])

Gibt das bitweise UND der in der Argumentliste bereitgestellten Werte zurück. Es müssen mindestens zwei sein.

compl(val)

Gibt das bitweise Komplement von val zurück.

lshift(val, count)

Gibt den Wert von val zurück, der um count Bits nach links verschoben ist.

or(v1, v2 [, ...])

Gibt das bitweise ODER der in der Argumentliste bereitgestellten Werte zurück. Es müssen mindestens zwei sein.

rshift(val, count)

Gibt den Wert von val zurück, nach rechts verschoben um count Bits.

xor(v1, v2 [, ...])

Gibt das bitweise XOR der in der Argumentliste bereitgestellten Werte zurück. Es müssen mindestens zwei sein.

Typfunktionen

Die folgenden Funktionen stellen typbezogene Informationen zu ihren Argumenten bereit.

isarray(x)

Gibt true zurück, wenn x ein Array ist, andernfalls false.

typeof(x)

Gibt eine Zeichenfolge zurück, die den Typ von x angibt. Die Zeichenfolge ist eine von "array", "number", "regexp", "string", „strnum“, „unassigned“ oder „undefiniert“.

Internationalisierungsfunktionen

Die folgenden Funktionen können in Ihrem AWK-Programm zum Übersetzen von Zeichenfolgen zur Laufzeit verwendet werden. Ausführliche Informationen finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.

bindtextdomain(directory [, domain])

Geben Sie das Verzeichnis an, in dem gawk nach den .gmo-Dateien sucht, falls diese nicht an den „Standard“-Speicherorten abgelegt werden oder nicht abgelegt werden können. Es gibt das Verzeichnis zurück, in dem domain „gebunden“ ist.

Die Standard-Domäne ist der Wert von TEXTDOMAIN. Wenn Verzeichnis die Nullzeichenfolge ("") ist, gibt bindtextdomain() die aktuelle Bindung für die angegebene Domäne zurück .

dcgettext(string [, domain [, category]])

Gibt die Übersetzung von string in der Textdomäne domain für die Gebietsschemakategorie category zurück. Der Standardwert für domain ist der aktuelle Wert von TEXTDOMAIN. Der Standardwert für Kategorie ist "LC_MESSAGES".

dcngettext(string1, string2, number [, domain [, category]])

Gibt die Pluralform zurück, die für Nummer der Übersetzung von string1 und string2 in der Textdomäne domain für die Gebietsschemakategorie < verwendet wirdKategorie. Der Standardwert für domain ist der aktuelle Wert von TEXTDOMAIN. Der Standardwert für Kategorie ist "LC_MESSAGES".

Boolesche Funktionen

Sie können spezielle boolesche Werte erstellen; Im Handbuch erfahren Sie, wie sie funktionieren und warum sie existieren.

mkbool(expression )

Basierend auf dem booleschen Wert von Ausdruck wird entweder ein wahrer Wert oder ein falscher Wert zurückgegeben. Wahre Werte haben den numerischen Wert eins. Falsche Werte haben den numerischen Wert Null.

BENUTZERDEFINIERTE FUNKTIONEN

Funktionen in AWK sind wie folgt definiert:

Funktion Name(Parameterliste) { Anweisungen

Funktionen werden ausgeführt, wenn sie aus Ausdrücken in Mustern oder Aktionen aufgerufen werden. Die im Funktionsaufruf bereitgestellten tatsächlichen Parameter werden verwendet, um die in der Funktion deklarierten formalen Parameter zu instanziieren. Arrays werden als Referenz übergeben, andere Variablen werden als Wert übergeben.

Lokale Variablen werden als zusätzliche Parameter in der Parameterliste deklariert. Die Konvention besteht darin, lokale Variablen von realen Parametern durch zusätzliche Leerzeichen in der Parameterliste zu trennen. Zum Beispiel:

function  f(p, q,     a, b)	# a and b are local
{
	. . .
}

/abc/	{ . . . ; f(1, 2) ; . . . }

Die linke Klammer in einem Funktionsaufruf muss unmittelbar auf den Funktionsnamen folgen, ohne dazwischen liegende Leerzeichen. Diese Einschränkung gilt nicht für die oben aufgeführten integrierten Funktionen.

Funktionen können sich gegenseitig aufrufen und rekursiv sein. Als lokale Variablen verwendete Funktionsparameter werden beim Funktionsaufruf mit der Nullzeichenfolge und der Zahl Null initialisiert.

Verwenden Sie return expr, um einen Wert von einer Funktion zurückzugeben. Der Rückgabewert ist undefiniert, wenn kein Wert angegeben wird oder wenn die Funktion durch „Abfallen“ vom Ende zurückkehrt.

Funktionen können indirekt aufgerufen werden. Weisen Sie dazu einer Variablen den Namen der aufzurufenden Funktion als String zu. Verwenden Sie die Variable dann so, als wäre sie der Name einer Funktion, der ein @-Zeichen vorangestellt ist, etwa so:

function myfunc()
{
	print "myfunc called"
	. . .
}

{	. . .
	the_func = "myfunc"
	@the_func()	# call through the_func to myfunc
	. . .
}

Wenn - -lint bereitgestellt wurde, warnt gawk vor Aufrufen undefinierter Funktionen zur Analysezeit und nicht zur Laufzeit. Der Aufruf einer undefinierten Funktion zur Laufzeit ist ein schwerwiegender Fehler.

NEUE FUNKTIONEN DYNAMISCH LADEN

Mit der @load-Anweisung können Sie dem laufenden gawk-Interpreter dynamisch neue, in C oder C++ geschriebene Funktionen hinzufügen. Die vollständigen Details würden den Rahmen dieser Handbuchseite sprengen; siehe https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.

SIGNALE

Der gawk-Profiler akzeptiert zwei Signale. SIGUSR1 bewirkt, dass ein Profil und ein Funktionsaufrufstapel in der Profildatei ausgegeben werden, die entweder awkprof.out oder die Datei ist, die mit dem - -profile benannt wurde Option. Anschließend läuft es weiter. SIGHUP veranlasst gawk, den Profil- und Funktionsaufrufstapel zu sichern und dann zu beenden.

INTERNATIONALISIERUNG

String-Konstanten sind in doppelte Anführungszeichen eingeschlossene Zeichenfolgen. In nicht englischsprachigen Umgebungen ist es möglich, Zeichenfolgen im AWK-Programm als eine Übersetzung in die lokale natürliche Sprache zu markieren. Solche Zeichenfolgen werden im AWK-Programm mit einem führenden Unterstrich („_“) gekennzeichnet. Zum Beispiel,

gawk 'BEGIN { print "hello, world" }'

gibt immer hello, world aus. Aber,

gawk 'BEGIN { print _"hello, world" }'

könnte in Frankreich bonjour, monde drucken. Unter https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization finden Sie die Schritte zum Erstellen und Ausführen eines lokalisierbaren AWK-Programms.

GNU-ERWEITERUNGEN

Gawk hat zu viele Erweiterungen zu POSIX awk. Sie werden unter https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html beschrieben. Alle Erweiterungen können durch Aufrufen von gawk mit den Optionen - -traditional oder - -posix deaktiviert werden.

UMGEBUNGSVARIABLEN

Die Umgebungsvariable AWKPATH kann verwendet werden, um eine Liste von Verzeichnissen bereitzustellen, die gawk durchsucht, wenn nach Dateien gesucht wird, die über -f, benannt wurden - -file-, -i- und - -include-Optionen sowie die @include-Direktive. Wenn die erste Suche fehlschlägt, wird der Pfad erneut durchsucht, nachdem .awk an den Dateinamen angehängt wurde.

Die Umgebungsvariable AWKLIBPATH kann verwendet werden, um eine Liste von Verzeichnissen bereitzustellen, die gawk durchsucht, wenn nach Dateien gesucht wird, die über -l und benannt wurden - -load-Optionen.

Die Umgebungsvariable GAWK_PERSIST_FILE gibt, sofern vorhanden, eine Datei an, die als Sicherungsspeicher für den persistenten Speicher verwendet werden soll. Dies ist eine experimentelle Funktion. Einzelheiten finden Sie unter GAWK: Effektive AWK-Programmierung.

Die Umgebungsvariable GAWK_READ_TIMEOUT kann verwendet werden, um eine Zeitüberschreitung in Millisekunden für das Lesen von Eingaben von einem Terminal, einer Pipe oder einer bidirektionalen Kommunikation einschließlich Sockets anzugeben.

Für die Verbindung zu einem Remote-Host über einen Socket steuert GAWK_SOCK_RETRIES die Anzahl der Wiederholungsversuche und GAWK_MSEC_SLEEP das Intervall zwischen Wiederholungsversuchen. Das Intervall wird in Millisekunden angegeben. Auf Systemen, die usleep(3) nicht unterstützen, wird der Wert auf eine ganze Zahl von Sekunden aufgerundet.

Wenn POSIXLY_CORRECT in der Umgebung vorhanden ist, verhält sich gawk genau so, als ob - -posix in der Befehlszeile angegeben worden wäre. Wenn - -lint angegeben wurde, gibt gawk eine entsprechende Warnmeldung aus.

Legen Sie GAWK_NO_MPFR_WARN in der Umgebung fest, um die Warnung über den veralteten MPFR-Modus stummzuschalten.

EXIT-STATUS

Wenn die exit-Anweisung mit einem Wert verwendet wird, wird gawk mit dem ihm zugewiesenen numerischen Wert beendet.

Andernfalls, wenn während der Ausführung keine Probleme aufgetreten sind, wird gawk mit dem Wert der C-Konstante EXIT_SUCCESS beendet. Dieser liegt in der Regel bei Null.

Wenn ein Fehler auftritt, wird gawk mit dem Wert der C-Konstante EXIT_FAILURE beendet. Dies ist normalerweise einer.

Wenn gawk aufgrund eines schwerwiegenden Fehlers beendet wird, ist der Exit-Status 2. Auf Nicht-POSIX-Systemen kann dieser Wert EXIT_FAILURE zugeordnet werden.

VERSIONSINFORMATION

Diese Manpage dokumentiert gawk, Version 5.2.

AUTOREN

Die Originalversion von UNIX awk wurde von Alfred Aho, Peter Weinberger und Brian Kernighan von Bell Laboratories entworfen und implementiert. Brian Kernighan pflegt und verbessert es weiterhin.

Paul Rubin und Jay Fenlason von der Free Software Foundation haben gawk geschrieben, um mit der Originalversion von awk kompatibel zu sein, die in der Seventh Edition UNIX vertrieben wurde. John Woods hat eine Reihe von Fehlerbehebungen beigesteuert. David Trueman hat mit Beiträgen von Arnold Robbins gawk mit der neuen UNIX-Version awk kompatibel gemacht. Arnold Robbins ist der aktuelle Betreuer.

Eine vollständige Liste der Mitwirkenden von gawk und seiner Dokumentation finden Sie unter GAWK: Effektive AWK-Programmierung.

Aktuelle Informationen zu Betreuern und den aktuell unterstützten Ports finden Sie in der README-Datei in der gawk-Distribution.

FEHLERBERICHTE

Wenn Sie einen Fehler in gawk finden, verwenden Sie bitte das Programm gawkbug(1), um ihn zu melden.

Vollständige Anweisungen zum Melden eines Fehlers finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Bitte lesen und befolgen Sie die dort gegebenen Anweisungen sorgfältig. Dadurch wird die Fehlerberichterstattung und -behebung für alle Beteiligten wesentlich einfacher. Wirklich.

Fehler

Die Option -F ist aufgrund der Funktion zur Zuweisung von Befehlszeilenvariablen nicht erforderlich. es bleibt nur aus Gründen der Abwärtskompatibilität bestehen.

Diese Handbuchseite ist zu lang. gawk hat zu viele Funktionen.

SIEHE AUCH

egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).

The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.

GAWK: Effective AWK Programming, Edition 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.

The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.

BEISPIELE

Print and sort the login names of all users:

	BEGIN	{ FS = ":" }
		{ print $1 | "sort" }

Count lines in a file:

		{ nlines++ }
	END	{ print nlines }

Precede each line by its number in the file:

	{ print FNR, $0 }

Concatenate and line number (a variation on a theme):

	{ print NR, $0 }

Run an external command for particular lines of data:

	tail -f access_log |
	awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'

DANKSAGUNGEN

Brian Kernighan leistete beim Testen und Debuggen wertvolle Hilfe. Wir danken ihm.

KOPIERERLAUBNISSE

Urheberrecht © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.

Es wird die Erlaubnis erteilt, wörtliche Kopien dieser Handbuchseite anzufertigen und zu verbreiten, sofern der Urheberrechtsvermerk und dieser Genehmigungsvermerk auf allen Kopien erhalten bleiben.

Es wird die Erlaubnis erteilt, diese Datei durch troff zu verarbeiten und die Ergebnisse auszudrucken, vorausgesetzt, dass das gedruckte Dokument einen mit diesem identischen Vervielfältigungsvermerk trägt, mit Ausnahme der Entfernung dieses Absatzes (dieser Absatz ist für die gedruckte Handbuchseite nicht relevant).

Es wird die Erlaubnis erteilt, modifizierte Versionen dieser Handbuchseite unter den Bedingungen für wörtliches Kopieren zu kopieren und zu verbreiten, vorausgesetzt, dass das gesamte resultierende abgeleitete Werk unter den Bedingungen einer mit dieser identischen Genehmigungsmitteilung verbreitet wird.

Es wird die Erlaubnis erteilt, Übersetzungen dieser Handbuchseite in eine andere Sprache zu kopieren und zu verbreiten, unter den oben genannten Bedingungen für geänderte Versionen, mit der Ausnahme, dass dieser Erlaubnishinweis in einer von der Stiftung genehmigten Übersetzung angegeben werden darf.