- SYNTAX
- ZUERST LESEN
- BESCHREIBUNG
- VORWORT
- OPTIONENFORMAT
- OPTIONEN
- AUSFÜHRUNG DES AWK-PROGRAMMS
- VARIABLEN, DATENSÄTZE UND FELDER
- Muster und Aktionen
- VOM BENUTZER DEFINIERTE FUNKTIONEN
- DYNAMISCHES LADEN NEUER FUNKTIONEN
- SIGNALE
- INTERNATIONALISIERUNG
- GNU-ERWEITERUNGEN
- UMGEBUNGSVARIABLEN
- BEENDIGUNGSSTATUS
- VERSIONINFORMATIONEN
- AUTOREN
- FEHLERBERICHTE UND FRAGEN
- FEHLER
- SIEHE AUCH
- BEISPIELE
- KOPIERRECHTLICHE BESTIMMUNGEN
gawk - Mustersuche- und Verarbeitungssprache
SYNTAX
gawk [ POSIX- oder GNU-Formatoptionen ] -f Programmdatei [ -- ] Datei ...
gawk [ POSIX- oder GNU-Formatoptionen ] [ -- ] Programmtext Datei ...
ZUERST LESEN
Diese Manpage wird als Gefälligkeit bereitgestellt. Beachten Sie, dass die maßgebliche Quelle für gawk das Texinfo-Handbuch ist, das online in verschiedenen Formaten unter https://www.gnu.org/software/gawk/manual verfügbar ist. Es kann auch im Info-Subsystem Ihres Systems installiert und daher über den Befehl info(1) aufgerufen werden.
Im Falle von Widersprüchen zwischen dem Texinfo-Handbuch und dieser Manpage sollte das Handbuch als maßgeblich angesehen werden.
BESCHREIBUNG
Gawk ist die GNU-Implementierung der AWK-Programmiersprache. Es entspricht der Definition der Sprache im POSIX 1003.1-Standard. Diese Version basiert wiederum auf der Beschreibung in The AWK Programming Language von Aho, Kernighan und Weinberger. Gawk bietet die zusätzlichen Funktionen, die in der aktuellen Version von Brian Kernighans awk enthalten sind, sowie zahlreiche GNU-spezifische Erweiterungen.
Die Befehlszeile besteht aus Optionen für gawk selbst, dem AWK-Programmtext (falls nicht über die Optionen -f oder --include angegeben) und Werten, die den vordefinierten AWK-Variablen ARGC und ARGV zur Verfügung gestellt werden.
VORWORT
Diese Manpage ist absichtlich so kurz wie möglich gehalten. Vollständige Informationen finden Sie in GAWK: Effective AWK Programming. Dort sollten Sie nachlesen, um die vollständige Geschichte zu jedem spezifischen Feature zu erhalten. Wo möglich, werden Links zur Online-Version des Handbuchs bereitgestellt.
OPTIONENFORMAT
Gawk-Optionen können entweder traditionelle POSIX-Format-Einzelbuchstabenoptionen oder GNU-Format-Langoptionen sein. POSIX-Optionen beginnen mit einem einzelnen „-“, während Langoptionen mit „--“ beginnen. Langoptionen werden sowohl für GNU-spezifische Funktionen als auch für POSIX-mandatierte Funktionen bereitgestellt.
Gawk-spezifische Optionen werden typischerweise in Langformatoptionen verwendet. Argumente für Langoptionen werden entweder durch ein Gleichheitszeichen ohne dazwischenliegende Leerzeichen mit der Option verbunden oder sie können im nächsten Befehlszeilenargument angegeben werden. Langoptionen können abgekürzt werden, solange die Abkürzung eindeutig bleibt.
Darüber hinaus hat jede Langoption eine entsprechende Kurzoption, sodass die Funktionalität der Option in #!-ausführbaren Skripten verwendet werden kann.
OPTIONEN
Gawk akzeptiert die folgenden Optionen. Zuerst werden die Standardoptionen aufgelistet, gefolgt von den Optionen für gawk-Erweiterungen, die alphabetisch nach Kurzoption geordnet sind.
-f Programmdatei, --file Programmdatei
Liest den AWK-Programmcode aus der Datei Programmdatei anstelle des ersten Befehlszeilenarguments. Es können mehrere -f-Optionen verwendet werden. Dateien, die mit -f gelesen werden, werden so behandelt, als würden sie mit einer impliziten @namespace "awk"-Anweisung beginnen.
-F fs, --field-separator fs
Verwenden Sie fs als Eingabefeldtrennzeichen (der Wert der vordefinierten Variablen FS).
-v var=val, --assign var=val
Weisen Sie der Variablen var den Wert val zu, bevor das Programm ausgeführt wird. Diese Variablenwerte stehen im BEGIN-Teil eines AWK-Programms zur Verfügung.
-b, --characters-as-bytes
Behandeln Sie alle Eingabedaten als einzelne Byte-Zeichen. Die Option --posix hat Vorrang.
-c, --traditional
Führen Sie im Kompatibilitätsmodus aus. Im Kompatibilitätsmodus verhält sich gawk identisch mit Brian Kernighans awk; keine der GNU-spezifischen Erweiterungen wird erkannt.
-C, --copyright
Geben Sie die kurze Version der GNU-Copyright-Information auf der Standardausgabe aus und beenden Sie das Programm erfolgreich.
-d[file], --dump-variables[=file]
Geben Sie eine sortierte Liste der globalen Variablen, ihrer Typen und endgültigen Werte in eine Datei aus. Die Standarddatei ist awkvars.out im aktuellen Verzeichnis.
-D[file], --debug[=file]
Aktivieren Sie das Debugging von AWK-Programmen. Standardmäßig liest der Debugger die Befehle interaktiv von der Tastatur (Standardeingabe). Das optionale Dateiarument gibt eine Datei mit einer Liste von Befehlen an, die der Debugger nicht interaktiv ausführt. In diesem Ausführungsmodus lädt gawk den AWK-Quellcode und fordert dann Debugging-Befehle an. Gawk kann nur AWK-Programmquellen debuggen, die mit den Optionen -f und --include angegeben wurden. Der Debugger ist in GAWK: Effective AWK Programming dokumentiert; 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 übergebene Argument wird so behandelt, als würde es mit einer impliziten @namespace "awk"-Anweisung beginnen.
-E file, --exec file
Ähnlich wie -f, jedoch ist diese Option die letzte, die verarbeitet wird. Diese sollte mit #!-Skripten, insbesondere für CGI-Anwendungen, verwendet werden, um zu vermeiden, dass Optionen oder Quellcode über die Befehlszeile von einer URL übergeben werden. Diese Option deaktiviert die Zuweisung von Variablen über die Befehlszeile.
-g, --gen-pot
Scannen und analysieren Sie das AWK-Programm und generieren Sie eine GNU-.pot-Datei (Portable Object Template) auf der Standardausgabe mit Einträgen für alle lokalisierbaren Zeichenketten in dem Programm. Das Programm selbst wird nicht ausgeführt.
-h, --help
Geben Sie 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-Quellcodebibliothek. Dies durchsucht die Bibliothek mithilfe der AWKPATH-Umgebungsvariable. 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 Hauptprogramquelle dar. Dateien, die mit --include gelesen werden, werden so behandelt, als würden sie mit einer impliziten @namespace "awk"-Anweisung beginnen.
-I, --trace
Gibt die internen Bytecode-Namen aus, während das Programm ausgeführt wird. Die Ausgabe wird auf die Standardfehlerausgabe geschrieben. Jeder „Opcode“ wird in der Ausgabe durch ein „+“-Zeichen eingeleitet.
-k, --csv
Aktiviert die spezielle CSV-Verarbeitung. Weitere Informationen finden Sie im Abschnitt „Comma Separated Values“.
-l lib, --load lib
Lädt eine Gawk-Erweiterung aus der gemeinsam genutzten Bibliothek lib. Hierbei wird zunächst
die Bibliothek unter Verwendung der Umgebungsvariablen AWKLIBPATH gesucht. Wenn die erste
Suche fehlschlägt, wird ein zweiter Versuch unternommen, nachdem das standardmäßige Suffix für
gemeinsam genutzte Bibliotheken für die jeweilige Plattform angehängt wurde. Es wird erwartet,
dass die Initialisierungsroutine der Bibliothek dl_load() heißt.
-L [value], --lint[=value]
Gibt Warnungen über Konstrukte aus, die fragwürdig sind oder nicht zu anderen AWK-Implementierungen
portierbar sind. Siehe https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options
für die Liste der möglichen Werte für value.
-M, --bignum
Erzwingt die Verwendung von Arithmetik mit beliebiger Genauigkeit für Zahlen. Diese Option hat keine Auswirkung, wenn Gawk nicht mit den GNU MPFR- und GMP-Bibliotheken kompiliert wurde. (In diesem Fall gibt Gawk eine Warnung aus.)
HINWEIS: Diese Funktion ist vorläufig. Der Haupt-Gawk-Entwickler unterstützt sie nicht mehr,
obwohl ein Mitglied des Entwicklungsteams dies tut. Wenn sich diese Situation ändert, wird
die Funktion aus Gawk entfernt.
-n, --non-decimal-data
Erkennt oktale und hexadezimale Werte in den Eingabedaten. Verwenden Sie diese Option mit großer Vorsicht!
-N, --use-lc-numeric
Erzwingt, dass Gawk beim Parsen von Eingabedaten das Dezimaltrennzeichen der Gebietsschemaeinstellung verwendet.
-o[file], --pretty-print[=file]
Gibt eine formatierte Version des Programms in der Datei aus. Die Standarddatei ist
awkprof.out im aktuellen Verzeichnis. Diese Option impliziert --no-optimize.
-O, --optimize
Aktiviert die standardmäßigen Optimierungen von Gawk für die interne Darstellung des Programms. Diese Option ist standardmäßig aktiviert.
-p[prof-file], --profile[=prof-file]
Startet eine Profilierungs-Session und sendet die Profilierungsdaten an die Datei prof-file.
Der Standardwert ist awkprof.out im aktuellen Verzeichnis. Das Profil enthält die
Ausführungsanzahl jeder Anweisung im Programm am linken Rand und die Anzahl der Funktionsaufrufe
für jede benutzerdefinierte Funktion. Gawk wird in diesem Modus langsamer ausgeführt. Diese
Option impliziert --no-optimize.
-P, --posix
Aktiviert den Kompatibilitätsmodus und deaktiviert eine Reihe gängiger Erweiterungen.
-r, --re-interval
Aktiviert die Verwendung von Intervallausdrücken beim Abgleichen mit regulären Ausdrücken. Intervallausdrücke sind standardmäßig aktiviert, diese Option dient jedoch der Rückwärtskompatibilität.
-s, --no-optimize
Deaktiviert die standardmäßigen Optimierungen von Gawk für die interne Darstellung des Programms.
-S, --sandbox
Führt Gawk im Sandbox-Modus aus, wobei die Funktionen system(), die Eingabeumleitung mit
getline, die Ausgabeumleitung mit print und printf sowie das Laden dynamischer
Erweiterungen deaktiviert werden. Auch die Befehlsausführung (über Pipelines) wird deaktiviert.
-t, --lint-old
Gibt Warnungen zu Konstrukten aus, die nicht mit der ursprünglichen Version von UNIX kompatibel sind.
-V, --version
Gibt Versionsinformationen für diese spezielle Kopie von gawk auf der Standardausgabe aus. Dies ist nützlich, wenn Fehler gemeldet werden. Gemäß den GNU-Codierungsstandards führen diese Optionen zu einem sofortigen, erfolgreichen Beenden.
-- Signalisiert das Ende der Optionen. Dies ist nützlich, um es dem AWK-Programm zu ermöglichen, dass weitere Argumente mit einem „-“ beginnen.
Im Kompatibilitätsmodus werden alle anderen Optionen als ungültig gekennzeichnet, aber andernfalls ignoriert. Im normalen Betrieb werden unbekannte Optionen, sofern Programmtext angegeben wurde, an das AWK-Programm im ARGV-Array zur Verarbeitung weitergeleitet.
Für die POSIX-Kompatibilität kann die Option -W gefolgt von dem Namen einer langen Option verwendet werden.
AUSFÜHRUNG DES AWK-PROGRAMMS
Ein AWK-Programm besteht aus einer Folge optionaler Direktiven, Muster-Aktions-Anweisungen und optionalen Funktionsdefinitionen.
@include "Dateiname"
@load "Dateiname"
@namespace "Name"
Muster { Anweisungen }
Funktion Name(Parameterliste) { Anweisungen }
Gawk liest zuerst den Programmtext aus den Programmdaten (falls angegeben), aus den Argumenten für --source oder aus dem ersten nicht-optionenbezogenen Argument in der Befehlszeile. Die Optionen -f und --source können mehrfach in der Befehlszeile verwendet werden. Gawk liest den Programmtext, als ob alle Programmdaten und Programmtext-Argumente aus der Befehlszeile zusammengefügt würden.
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 verwendet werden, um Erweiterungsfunktionen in Ihr Programm zu laden. Dies entspricht der Verwendung der Option --load.
Die Umgebungsvariable AWKPATH gibt einen Suchpfad an, der beim Auffinden von Quelldateien verwendet wird, die mit den Optionen -f und --include angegeben werden. Wenn diese Variable nicht vorhanden ist, ist der Standardsuchpfad ". :/usr/local/share/awk". (Das tatsächliche Verzeichnis kann je nachdem, wie gawk erstellt und installiert wurde, variieren.) Wenn ein Dateiname, der der Option -f übergeben wird, ein Zeichen „/“ enthält, wird keine Pfadsuche durchgeführt.
Die Umgebungsvariable AWKLIBPATH gibt einen Suchpfad an, der beim Auffinden von Quelldateien verwendet wird, die mit der Option --load angegeben werden. Wenn diese Variable nicht vorhanden ist, ist der Standardsuchpfad "/usr/local/lib/gawk". (Das tatsächliche Verzeichnis kann je nachdem, wie gawk erstellt und installiert wurde, variieren.)
Gawk führt AWK-Programme in der folgenden Reihenfolge aus. Zuerst werden alle Variablenzuweisungen ausgeführt, die über die Option -v angegeben wurden. Als Nächstes kompiliert gawk das Programm in eine interne Form. Dann führt gawk den Code in den BEGIN-Regeln (falls vorhanden) aus und geht dann jede in dem ARGV-Array angegebene Datei durch (bis ARGV[ARGC-1]). Wenn keine Dateien in der Befehlszeile angegeben sind, liest gawk die Standardeingabe.
Wenn ein Dateiname in der Befehlszeile das Format var=val hat, wird er als Variablenzuweisung behandelt. Die Variable var erhält den Wert val. (Dies geschieht, nachdem alle BEGIN-Regeln ausgeführt wurden.)
Wenn der Wert eines bestimmten Elements von ARGV leer ("") ist, überspringt gawk es.
Für jede Eingabedatei führt gawk den zugehörigen Code aus, falls eine BEGINFILE-Regel vorhanden ist, bevor die Inhalte der Datei verarbeitet werden. Ebenso führt gawk den Code aus, der den ENDFILE-Regeln zugeordnet ist, nachdem die Datei verarbeitet wurde.
Für jeden Datensatz in der Eingabe testet 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.
Schließlich führt gawk, nachdem alle Eingaben verarbeitet wurden, den Code in den END-Regeln aus (falls vorhanden).
Kommandozeilenverzeichnisse
Gemäß POSIX müssen Dateien, die in der awk-Befehlszeile angegeben sind, Textdateien sein. Das Verhalten ist „undefiniert“, wenn dies nicht der Fall ist. Die meisten awk-Versionen behandeln ein Verzeichnis in der Befehlszeile als fatalen Fehler.
Für gawk erzeugt ein Verzeichnis in der Befehlszeile eine Warnung, wird aber ansonsten übersprungen. Wenn entweder die Option --posix oder --traditional angegeben wird, behandelt gawk Verzeichnisse in der Befehlszeile als fatalen Fehler.
VARIABLEN, DATENSÄTZE UND FELDER
AWK-Variablen sind dynamisch; sie entstehen, wenn sie zum ersten Mal verwendet werden. Ihre Werte sind entweder Gleitkommazahlen oder Zeichenketten oder beides, je nachdem, wie sie verwendet werden. Darüber hinaus ermöglicht gawk, dass Variablen einen regulären Ausdruckstyp haben. AWK hat auch eindimensionale Arrays; mehrdimensionale Arrays können simuliert werden. Gawk bietet jedoch echte Arrays von Arrays. Mehrere vordefinierte Variablen werden während der Programmausführung festgelegt; diese werden bei Bedarf beschrieben und unten zusammengefasst.
Datensätze
Normalerweise werden Datensätze durch Zeilenumbruchzeichen getrennt. Sie können steuern, wie Datensätze getrennt werden, indem Sie Werte der integrierten Variablen RS zuweisen. Weitere Informationen 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, wobei der Wert der Variablen FS als Feldtrenner verwendet wird. Zusätzlich können FIELDWIDTHS und FPAT verwendet werden, um die Aufteilung der Eingabefelder zu steuern. Weitere Informationen finden Sie unter [https://www.gnu.org/software/gawk/manual/html_node/Fields.html].
Auf jedes Feld im Eingabedatensatz kann über seine Position zugegriffen werden: $1, $2 usw. $0 ist der gesamte Datensatz, einschließlich der führenden und nachgestellten Leerzeichen.
Die Variable NF ist auf die Gesamtzahl der Felder im Eingabedatensatz gesetzt.
Verweise auf nicht vorhandene Felder (d. h. Felder nach $NF) ergeben die Nullzeichenkette. Wenn Sie jedoch einem nicht vorhandenen Feld einen Wert zuweisen (z. B. $(NF+2) = 5), wird der Wert von NF erhöht, alle dazwischenliegenden Felder werden mit der Nullzeichenkette als ihren Wert erstellt und der Wert von $0 wird neu berechnet, wobei die Felder durch den Wert von OFS getrennt werden. Verweise auf Felder mit negativer Nummerierung verursachen einen fatalen Fehler. Durch das Verringern von NF werden die Werte der Felder nach dem neuen Wert verworfen, und der Wert von $0 wird neu berechnet, wobei die Felder durch den Wert von OFS getrennt werden.
Das Zuweisen eines Wertes zu einem vorhandenen Feld führt dazu, dass der gesamte Datensatz neu erstellt wird, wenn auf $0 Bezug genommen wird. In ähnlicher Weise führt das Zuweisen eines Wertes an $0 dazu, dass der Datensatz neu aufgeteilt wird, wodurch neue Werte für die Felder erstellt werden.
Kommagetrennte Werte
Wenn es mit der Option -k oder --csv aufgerufen wird, verwendet gawk nicht die oben beschriebene reguläre Datensatz- und Feldaufteilung. Stattdessen werden Datensätze durch nicht-eingeschlossene Zeilenumbrüche beendet, und Felder werden durch Kommas getrennt. Doppelte Anführungszeichen können verwendet werden, um Felder einzuschließen, die Kommas, Zeilenumbrüche oder doppelte doppelte Anführungszeichen enthalten. Weitere Informationen finden Sie unter [https://www.gnu.org/software/gawk/manual/html_node/Comma-Separated-Fields.html].
Integrierte Variablen
Die integrierten Variablen von Gawk sind unten aufgeführt. Diese Liste ist absichtlich kurz gehalten. Einzelheiten finden Sie unter [https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.html].
ARGC Die Anzahl der Befehlszeilenargumente.
ARGIND Der Index in ARGV der aktuell verarbeiteten Datei.
ARGV Ein Array von Befehlszeilenargumenten. Das Array ist von 0 bis ARGC - 1 indiziert.
BINMODE Auf nicht-POSIX-Systemen wird die Verwendung des "binären" Modus für alle Datei-E/A angegeben. Einzelheiten finden Sie unter [https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html].
CONVFMT Das Konvertierungsformat für Zahlen, standardmäßig "%.6g".
ENVIRON Ein Array, das die Werte der aktuellen Umgebung enthält. Das Array ist nach den Umgebungsvariablen indiziert, wobei jedes Element den Wert dieser Variablen enthält.
ERRNO Wenn ein Systemfehler auftritt, entweder beim Umleiten für getline, beim Lesen für getline oder beim Schließen, wird ERRNO auf eine Zeichenfolge gesetzt, die den Fehler beschreibt. Der Wert kann in nicht-englischen Gebietsschemas übersetzt werden.
FIELDWIDTHS Eine durch Leerzeichen getrennte Liste von Feldbreiten. Wenn diese festgelegt ist, analysiert gawk die Eingabe in Felder mit fester Breite, anstatt den Wert der Variablen FS als Feldtrennzeichen zu verwenden. Jede Feldbreite kann optional von einem durch Doppelpunkt getrennten Wert vorangestellt werden, der die Anzahl der Zeichen angibt, die vor dem Feld übersprungen werden sollen.
FILENAME Der Name der aktuellen Eingabedatei. Wenn keine Dateien in der Befehlszeile angegeben sind, ist der Wert von FILENAME "-". FILENAME ist jedoch innerhalb der BEGIN-Regel nicht definiert (es sei denn, es wird durch getline festgelegt).
FNR Die Eingabe-Datensatznummer in der aktuellen Eingabedatei.
FPAT Ein regulärer Ausdruck, der den Inhalt der Felder in einem Datensatz beschreibt. Wenn diese 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. Weitere Informationen 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
erweiterten Funktionen im Programm sind. HINWEIS: Sie dürfen die delete-Anweisung nicht
mit dem FUNCTAB-Array verwenden.
IGNORECASE Steuert die Groß-/Kleinschreibung bei allen regulären Ausdrücken und Zeichenkettenoperationen.
Weitere Informationen finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html.
LINT Ermöglicht die dynamische Steuerung der Option --lint innerhalb eines AWK-Programms.
NF Die Anzahl der Felder im aktuellen Eingabedatensatz.
NR Die Gesamtzahl der bisher gelesenen Eingabedatensätze.
OFMT Das Ausgabeformat für Zahlen, standardmäßig "%.6g".
OFS Das Ausgabefeldbegrenzer, standardmäßig ein Leerzeichen.
ORS Das Ausgabedatensatzbegrenzer, standardmäßig eine neue Zeile.
PREC Die Arbeitsgenauigkeit für Gleitkommazahlen mit beliebiger Genauigkeit, standardmäßig 53.
PROCINFO Die Elemente dieses Arrays ermöglichen den Zugriff auf Informationen über das laufende AWK-Programm.
Weitere Informationen finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset.
ROUNDMODE Der Rundungsmodus, der für die Arithmetik mit Zahlen beliebiger Genauigkeit verwendet wird, standardmäßig
"N" (IEEE-754 roundTiesToEven-Modus). Weitere Informationen finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode.
RS Das Eingabedatensatzbegrenzer, standardmäßig eine neue Zeile.
RT Der Datensatzterminator. Gawk setzt RT auf den Eingabetext, der auf das Zeichen oder die
reguläre Expression passt, die von RS angegeben wird.
RSTART Der Index des ersten übereinstimmenden Zeichens von match(); 0, wenn keine Übereinstimmung gefunden wurde.
RLENGTH Die Länge der durch match() übereinstimmenden Zeichenkette; -1, wenn keine Übereinstimmung gefunden wurde.
SUBSEP Die Zeichenkette, die zum Trennen mehrerer Indizes in Arrayelementen 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 Elemente mit einem Index zuweisen, der kein Variablenname ist.
TEXTDOMAIN Die Textdomäne des AWK-Programms; wird verwendet, um die lokalisierten Übersetzungen für die
Zeichenketten des Programms zu finden.
Arrays
Arrays werden mit einem Ausdruck in eckigen Klammern ([ und ]) indiziert. Wenn der Ausdruck eine Ausdrucksliste (expr, expr ...) ist, ist der Arrayindex eine Zeichenkette, die aus der Verkettung des (String-)Werts jedes Ausdrucks besteht, getrennt durch den Wert der Variablen SUBSEP. Diese Funktion wird verwendet, um mehrdimensionale Arrays zu simulieren. Zum Beispiel:
i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"
weist die Zeichenkette "hello, world\n" dem Element des Arrays x zu, das durch die Zeichenkette
"A\034B\034C" indiziert ist. Alle Arrays in AWK sind assoziativ, d. h. sie werden durch Zeichenkettenwerte indiziert.
Der spezielle Operator in kann verwendet werden, um zu testen, ob ein Array einen Index enthält, der aus einem bestimmten Wert besteht:
if (val in array)
print array[val]
Wenn das Array mehrere Indizes hat, verwenden Sie (i, j) in array.
Die in-Konstruktion kann auch in einer for-Schleife verwendet werden, um alle Elemente eines Arrays zu durchlaufen.
Allerdings funktioniert die Konstruktion (i, j) in array nur in Tests, nicht in for-Schleifen.
Ein Element kann mit der delete-Anweisung 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 einen Index angegeben wird.
Gawk unterstützt echte mehrdimensionale Arrays. Es ist nicht erforderlich, dass diese Arrays wie in C oder C++ "rechteckig" sind. Siehe [https://www.gnu.org/software/gawk/manual/html_node/Arrays] für weitere Informationen.
Namensräume
Gawk bietet eine einfache Namensraumfunktion, um das Problem zu lösen, dass alle Variablen in AWK global sind.
Ein qualifizierter Name besteht aus zwei einfachen Bezeichnern, die durch einen Doppelpunkt (::) verbunden sind. Der linke Bezeichner repräsentiert den Namensraum und der rechte Bezeichner ist die Variable innerhalb dieses Namensraums. Alle einfachen (nicht-qualifizierten) Namen gelten als Teil des "aktuellen" Namensraums; der Standardnamensraum ist awk. Einfache Bezeichner, die nur aus Großbuchstaben bestehen, werden jedoch in den Namensraum awk gezwungen, auch wenn der aktuelle Namensraum anders ist.
Sie können den aktuellen Namensraum mit der Anweisung @namespace "name" ändern.
Die Standard-vordefinierten Namen für integrierte Funktionen dürfen nicht als Namensräume verwendet werden. Die Namen zusätzlicher Funktionen, die von Gawk bereitgestellt werden, können als Namensräume oder als einfache Bezeichner in anderen Namensräumen verwendet werden. Weitere Informationen 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, Strings oder beides sein. Sie können auch reguläre Ausdrücke sein. Die Art und Weise, wie der Wert einer Variablen interpretiert wird, hängt vom Kontext ab. Wenn sie in einem numerischen Ausdruck verwendet wird, wird sie als Zahl behandelt; wenn sie als String verwendet wird, wird sie als String behandelt.
Um eine Variable als Zahl zu behandeln, addieren Sie Null dazu; um sie als String zu behandeln, verketten Sie sie mit dem Nullstring.
Nicht initialisierte Variablen haben den numerischen Wert Null und den Stringwert "" (der Null- oder leere String).
Wenn ein String in eine Zahl konvertiert werden muss, erfolgt die Konvertierung mit strtod(3). Eine Zahl wird in einen String konvertiert, indem der Wert von CONVFMT als Formatstring für sprintf(3) verwendet wird, wobei der numerische Wert der Variablen als Argument dient. Auch wenn alle Zahlen in AWK Gleitkommazahlen sind, werden ganzzahlige Werte immer als 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 "numerischen String"-Wert hat, werden Vergleiche ebenfalls numerisch durchgeführt. Andernfalls wird der numerische Wert in einen String konvertiert und ein Stringvergleich durchgeführt. Zwei Strings werden natürlich als Strings verglichen.
Beachten Sie, dass Zeichenkettenkonstanten, wie z. B. "57", keine numerischen Zeichenketten sind, sondern Zeichenkettenkonstanten.
Die Idee einer „numerischen Zeichenkette“ gilt nur für Felder, getline-Eingaben, FILENAME, ARGV-Elemente und ENVIRON-Elemente sowie für die Elemente eines durch split() oder patsplit() erstellten Arrays, die numerische Zeichenketten sind. Die grundlegende Idee ist, dass nur Benutzereingaben, die numerisch aussehen, als solche behandelt werden sollten.
Oktale und Hexadezimale Konstanten
Sie können C-ähnliche oktale und hexadezimale Konstanten in Ihrem AWK-Programm verwenden. Zum Beispiel ist der oktale Wert 011 gleich dem dezimalen Wert 9, und der hexadezimale Wert 0x11 ist gleich dem dezimalen Wert 17.
Zeichenkettenkonstanten
Zeichenkettenkonstanten in AWK sind Zeichenketten, die in doppelte Anführungszeichen eingeschlossen sind (z. B. "Wert"). Innerhalb von Zeichenketten werden bestimmte Escape-Sequenzen erkannt, wie in C. Weitere Informationen finden Sie unter [https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences].
Regex-Konstanten
Eine reguläre Ausdruckskonstante ist eine Zeichenkette, die in Schrägstriche eingeschlossen ist (z. B. /Wert/).
Die in der Anleitung beschriebenen Escape-Sequenzen können auch innerhalb von konstanten regulären Ausdrücken verwendet werden (z. B. /[ \t\f\n\r\v]/ findet Whitespace-Zeichen).
Gawk bietet stark typisierte reguläre Ausdruckskonstanten. Diese werden mit einem führenden @-Symbol geschrieben (z. B. @/Wert/). Solche Konstanten können Variablen (Variablen, Array-Elemente) zugewiesen und an benutzerdefinierte Funktionen übergeben werden. Variablen, denen dies zugewiesen wurde, haben den Typ „regulärer Ausdruck“.
Muster und Aktionen
AWK ist eine zeilenorientierte Sprache. Das Muster kommt zuerst, gefolgt von der Aktion. Aktionsanweisungen sind in { und } eingeschlossen. Entweder das Muster oder die Aktion können fehlen, aber nicht beides. Wenn das Muster fehlt, wird die Aktion für jeden einzelnen Datensatz der Eingabe ausgeführt. Eine fehlende Aktion entspricht
{ print }
was den gesamten Datensatz ausgibt.
Kommentare beginnen mit dem #-Zeichen und setzen sich bis zum Ende der Zeile fort. Leere Zeilen können verwendet werden, um Anweisungen zu trennen. Normalerweise endet eine Anweisung mit einem Zeilenumbruch, dies gilt jedoch nicht für Zeilen, die mit einem Komma, {, ?, :, && oder || enden. Zeilen, die mit do oder else enden, haben ebenfalls Anweisungen, die automatisch in der folgenden Zeile fortgesetzt werden. In anderen Fällen kann eine Zeile durch das Anhängen eines "\"-Zeichens fortgesetzt werden, wobei der Zeilenumbruch ignoriert wird. Ein "\"-Zeichen nach einem # ist jedoch nicht besonders.
Mehrere Anweisungen können durch Trennen mit einem ";" in eine Zeile gesetzt werden. Dies gilt sowohl für die Anweisungen innerhalb des Aktionsabschnitts 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
/regulärer Ausdruck/
relationale Ausdruck
Muster && Muster
Muster || Muster
Muster ? Muster : Muster
(Muster)
! Muster
Muster1, Muster2
BEGIN und END sind zwei spezielle Arten von Mustern, die nicht gegen die Eingabe getestet werden. Die Aktionsabschnitte aller BEGIN-Muster werden so zusammengeführt, als ob alle Anweisungen in einer einzigen BEGIN-Regel geschrieben worden wären. Sie werden ausgeführt, bevor irgendeine Eingabe gelesen wird. In ähnlicher Weise werden alle END-Regeln zusammengeführt und ausgeführt, wenn die gesamte Eingabe verarbeitet wurde (oder wenn eine Exit-Anweisung ausgeführt wird). BEGIN- und END-Muster können nicht mit anderen Mustern in Musterausdrücken kombiniert werden. BEGIN- und END-Muster dürfen keine fehlenden Aktionsabschnitte haben.
BEGINFILE und ENDFILE sind zusätzliche spezielle Muster, deren Aktionen ausgeführt werden, bevor die erste Zeile jeder Befehlszeilen-Eingabedatei gelesen wird und nachdem die letzte Zeile jeder Datei
gelesen wurde.
Innerhalb der BEGINFILE-Regel ist der Wert von ERRNO die leere Zeichenkette, wenn die Datei erfolgreich geöffnet wurde. Andernfalls gibt es ein Problem mit der Datei, und der Code sollte nextfile
verwenden, um sie zu überspringen.
Wird dies nicht getan, erzeugt gawk seinen üblichen fatalen Fehler für Dateien, die nicht geöffnet werden können.
Für /regulärer Ausdruck/-Muster wird die zugehörige Anweisung für jede Eingabezeile ausgeführt, die mit dem regulären Ausdruck übereinstimmt. Reguläre Ausdrücke sind im Wesentlichen die gleichen wie in egrep(1). Weitere Informationen 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 die logischen Operatoren UND, ODER bzw. NICHT, wie in C. Sie führen eine Kurzschlussauswertung durch, ebenfalls wie in C, und werden verwendet, um primitivere Musterausdrücke zu kombinieren. Wie in den meisten Sprachen können Klammern verwendet werden, um die Reihenfolge der Auswertung zu ändern.
Der ?: -Operator ist wie der gleichnamige Operator in C. Wenn das erste Muster wahr ist, dann ist das für den Test verwendete Muster das zweite Muster, andernfalls ist es das dritte. Nur eines der beiden Muster, das zweite oder dritte, wird ausgewertet.
Die Form Muster1, Muster2 eines Ausdrucks wird als Bereichsmuster bezeichnet. Es passt auf alle
Eingabezeilen, beginnend mit einer Zeile, die mit Muster1 übereinstimmt, und setzt sich fort, bis zu einer Zeile, die mit Muster2 übereinstimmt, einschließlich dieser. Es kombiniert sich nicht mit anderen
Arten von Musterausdrücken.
Aktionen
Aktionsanweisungen sind in geschweifte Klammern, { und }, eingeschlossen. Aktionsanweisungen bestehen aus den üblichen Zuweisungs-, bedingten und Schleifenanweisungen, die in den meisten Sprachen zu finden sind. Die verfügbaren Operatoren, Kontrollanweisungen und Ein-/Ausgabeanweisungen sind an denen in C orientiert.
Operatoren
Die Operatoren in AWK, in absteigender Reihenfolge der Priorität, sind:
(...) Gruppierung
$ Feldreferenz.
++ -- Inkrement und Dekrement, sowohl Präfix als auch Postfix.
^ Potenzierung.
+ - ! Unäre Plus-, Minus- und logische Negation.
* / % Multiplikation, Division und Modulus.
+ - Addition und Subtraktion.
space String-Verkettung.
| |& Pipe-I/O für getline, print und printf.
< > <= >= == !=
Die üblichen relationalen Operatoren.
~ !~ Regulärer Ausdruck, 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. Nur eines von expr2 und expr3 wird ausgewertet.
= += -= *= /= %= ^=
Zuweisung. Sowohl die absolute Zuweisung (var = value) als auch die Operatorzuweisung (die anderen Formen) werden unterstützt.
Kontrollanweisungen
Die Kontrollanweisungen sind wie folgt:
if (bedingung) anweisung [ else anweisung ]
while (bedingung) anweisung
do anweisung while (bedingung)
for (expr1; expr2; expr3) anweisung
for (var in array) anweisung
break
continue
delete array[index]
delete array
exit [ ausdruck ]
{ anweisungen }
switch (ausdruck) {
case wert|regex : anweisung
...
[ default: anweisung ]
}
I/O-Anweisungen
Die Ein-/Ausgabe-Anweisungen sind wie folgt:
close(datei [, wie]) Schließt eine geöffnete Datei, Pipe oder Coprozess. Die optionale Angabe "wie" sollte nur verwendet werden, wenn ein Ende einer bidirektionalen Pipe zu einem Coprozess geschlossen wird. Es muss sich um einen String-Wert handeln, entweder "to" oder "from".
getline Setzt $0 auf den nächsten Eingabedatensatz; setzt NF, NR, FNR, RT.
getline <datei Setzt $0 auf den nächsten Datensatz der Datei; setzt NF, RT.
getline var Setzt var auf den nächsten Eingabedatensatz; setzt NR, FNR, RT.
getline var <datei Setzt var auf den nächsten Datensatz der Datei; setzt RT.
befehl | getline [var]
Führt den Befehl aus und leitet die Ausgabe entweder in $0 oder var, wie oben beschrieben, und RT.
befehl |& getline [var]
Führt den Befehl als Coprozess aus und leitet die Ausgabe entweder in $0 oder var, wie oben beschrieben, und RT. (Der Befehl kann auch ein Socket sein. Siehe den Abschnitt "Spezielle Dateinamen" unten.)
fflush([datei]) Leert alle Puffer, die der geöffneten Ausgabedatei oder Pipe-Datei zugeordnet sind. Wenn die Datei fehlt oder ein leerer String ist, werden alle geöffneten Ausgabedateien und Pipes geleert.
next Stoppt die Verarbeitung des aktuellen Eingabedatensatzes. Liest den nächsten Eingabedatensatz und beginnt mit der Verarbeitung mit dem ersten Muster im AWK-Programm. Wenn das Ende der Eingabedaten erreicht ist, werden alle END-Regeln ausgeführt.
nextfile Stoppt die Verarbeitung der aktuellen Eingabedatei. Der nächste gelesene Eingabedatensatz stammt aus der nächsten Eingabedatei. Aktualisiert FILENAME und ARGIND, setzt FNR auf 1 zurück und beginnt mit der Verarbeitung mit dem ersten Muster im AWK-Programm. Wenn das Ende der Eingabedaten erreicht ist, werden die ENDFILE- und END-Regeln ausgeführt.
print Gibt den aktuellen Datensatz aus. Der Ausgabedatensatz wird mit dem Wert von ORS beendet.
print ausdrucksliste Gibt Ausdrücke aus. Jeder Ausdruck wird durch den Wert von OFS getrennt. Der Ausgabedatensatz wird mit dem Wert von ORS beendet.
print expr-list >file Ausdrucke in einer Datei ausgeben. Jeder Ausdruck wird durch den Wert von
OFS getrennt. Der Ausgabedatensatz wird mit dem Wert von ORS abgeschlossen.
printf fmt, expr-list Formatieren und ausgeben.
printf fmt, expr-list >file
Formatieren und in einer Datei ausgeben.
system(cmd-line) Führen Sie den Befehl cmd-line aus und geben Sie den Exit-Status zurück. (Dies ist möglicherweise nicht auf nicht-POSIX-Systemen verfügbar.) Siehe [https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions] für die vollständigen Details zum Exit-Status.
Zusätzliche Ausgabeumleitungen sind für print und printf zulässig.
print ... >> file
An die Datei anhängen.
print ... | command
In eine Pipe schreiben.
print ... |& command
Daten an einen Koprozess oder eine Socket senden. (Siehe auch den Abschnitt „Spezielle Dateinamen“ unten.)
Die getline-Funktion gibt 1 bei Erfolg, 0 bei Dateiende und -1 bei einem Fehler zurück. Wenn der Wert von errno(3) angibt, dass die E/A-Operation wiederholt werden kann und PROCINFO["input", "RETRY"] gesetzt ist, wird stattdessen -2 zurückgegeben, und weitere Aufrufe von getline können versucht werden. Bei einem Fehler wird ERRNO auf eine Zeichenkette gesetzt, die das Problem beschreibt.
HINWEIS: Das Öffnen eines bidirektionalen Sockets führt zu einem nicht fatalen Fehler, der an die aufrufende Funktion zurückgegeben wird. Wenn Sie eine Pipe, einen Koprozess oder einen Socket für getline oder für print oder printf innerhalb einer Schleife verwenden, müssen Sie close() verwenden, um neue Instanzen des Befehls oder Sockets zu erstellen. AWK schließt Pipes, Sockets oder Koprozesse nicht automatisch, wenn diese 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
Bei der E/A-Umleitung von print oder printf in eine Datei oder über getline aus einer Datei erkennt gawk bestimmte spezielle Dateinamen intern. Diese Dateinamen ermöglichen den Zugriff auf geöffnete Dateideskriptoren, die vom übergeordneten Prozess von gawk (normalerweise der Shell) übernommen wurden. Diese Dateinamen können auch auf der Befehlszeile verwendet werden, um Datendateien anzugeben. Die Dateinamen sind:
- Die Standardeingabe.
/dev/stdin Die Standardeingabe.
/dev/stdout Die Standardausgabe.
/dev/stderr Die Standardfehlerausgabe.
/dev/fd/n Die Datei, die dem geöffneten Dateideskriptor n zugeordnet ist.
Die folgenden speziellen Dateinamen können mit dem |& Coprozess-Operator für die Erstellung 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 auf dem lokalen Port lport zum Remote-Host rhost auf dem 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 das Systemstandard (wahrscheinlich IPv4). Nur mit dem bidirektionalen E/A-Operator |& verwendbar.
/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport
Ähnlich, verwendet aber UDP/IP anstelle von TCP/IP.
Numerische Funktionen
AWK verfügt über die folgenden eingebauten arithmetischen Funktionen:
atan2(y, x) Gibt den Arkustangens von y/x in Radiant zurück.
cos(expr) Gibt den Kosinus von expr zurück, wobei expr in Radiant angegeben ist.
exp(expr) Die Exponentialfunktion.
int(expr) Abschneiden auf eine ganze Zahl.
log(expr) Die natürliche Logarithmusfunktion.
rand() Gibt eine Zufallszahl N zwischen null und eins zurück, so dass 0 ≤ N < 1.
sin(expr) Gibt den Sinus von expr zurück, wobei expr in Radiant 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 wird,
verwenden Sie die aktuelle Uhrzeit. Gibt den vorherigen Startwert für den Zufallszahlengenerator zurück.
Zeichenkettenfunktionen
Gawk verfügt über die folgenden eingebauten Zeichenkettenfunktionen; Details 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. Sortiert die
Inhalte von s unter Verwendung der normalen Regeln von gawk zum Vergleichen von Werten und ersetzt die Indizes der sortierten Werte in s durch aufeinanderfolgende ganze Zahlen, beginnend mit 1.
Wenn das optionale Zielarray d angegeben wird, wird zuerst s in d dupliziert und dann d sortiert, wobei die Indizes des Quellarrays s unverändert bleiben. Die optionale Zeichenkette how steuert die Richtung und den Vergleichsmodus. Gültige Werte für how sind in 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(), mit dem Unterschied, dass die Array-Indizes zum Sortieren verwendet werden, nicht die Array-Werte. Nach Abschluss wird das Array numerisch indiziert, und die Werte sind die ursprünglichen Indizes. Die ursprünglichen Werte gehen verloren; geben Sie daher ein zweites Array an, wenn Sie die ursprünglichen Werte beibehalten möchten. Der Zweck der optionalen Zeichenkette how ist derselbe wie bei 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]) Sucht in der Zielzeichenkette t nach Übereinstimmungen des regulären Ausdrucks r. Wenn h
eine Zeichenkette ist, die mit g oder G beginnt, werden alle Übereinstimmungen von r durch s ersetzt.
Andernfalls ist h eine Zahl, die angibt, welche Übereinstimmung von r ersetzt werden soll. Wenn t nicht angegeben wird, wird stattdessen $0 verwendet. Innerhalb des Ersetzungstexts s kann die Sequenz \n verwendet werden, wobei n eine Ziffer von 1 bis 9 ist, um anzugeben, nur den Text, der dem n-ten eingeschlossenen Unterausdruck entspricht. Die Sequenz \0 steht für den gesamten übereinstimmenden Text, ebenso wie das Zeichen &. Anders als bei sub() und gsub() wird die geänderte Zeichenkette als Ergebnis der Funktion zurückgegeben, und die ursprüngliche Zielzeichenkette wird nicht geändert.
gsub(r, s [, t]) Ersetzt für jede Teilzeichenkette, die dem regulären Ausdruck r in der Zeichenkette t entspricht, die Zeichenkette s und gibt die Anzahl der Ersetzungen zurück. Wenn t nicht angegeben ist, wird $0 verwendet. Ein & im Ersetzungstext wird durch den tatsächlich übereinstimmenden Text ersetzt. Verwenden Sie \&, um ein literales & 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 Zeichen und Backslashes im Ersetzungstext von sub(), gsub() und gensub().)
index(s, t) Gibt den Index der Zeichenkette t in der Zeichenkette s zurück oder null, wenn t nicht vorhanden ist. (Dies impliziert, dass die Zeichenindizes bei eins beginnen.)
length([s]) Gibt die Länge der Zeichenkette s oder die Länge von $0 zurück, wenn s nicht angegeben ist. Bei einem Array-Argument gibt length() die Anzahl der Elemente im Array zurück.
match(s, r [, a]) Gibt die Position in s zurück, an der der reguläre Ausdruck r vorkommt, oder null, wenn r nicht vorhanden ist, und setzt die Werte von RSTART und RLENGTH. Beachten Sie, dass die Argumentreihenfolge die gleiche ist wie für den Operator ~: str ~ re. Siehe https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions für eine Beschreibung, wie das Array a gefüllt wird, wenn es angegeben ist.
patsplit(s, a [, r [, seps] ])
Teilt die Zeichenkette s in das Array a und das Trennzeichen-Array seps anhand des regulären Ausdrucks r auf und gibt die Anzahl der Felder zurück. Die Elementwerte sind die Teile von s, die mit r übereinstimmen. Der Wert von seps[i] ist das möglicherweise leere Trennzeichen, das nach a[i] steht. Der Wert von seps[0] ist das möglicherweise leere führende Trennzeichen. Wenn r weggelassen wird, wird stattdessen FPAT verwendet. Die Arrays a und seps werden zuerst geleert. Das Aufteilen verhält sich identisch mit der Feldauswertung mit FPAT.
split(s, a [, r [, seps] ])
Teilt die Zeichenkette s in das Array a und das Trennzeichen-Array seps anhand des regulären Ausdrucks r auf und gibt die Anzahl der Felder zurück. Wenn r weggelassen wird, wird stattdessen FS verwendet. Die Arrays a und seps werden zuerst geleert. seps[i] ist das Feldtrennzeichen, das von r zwischen a[i] und a[i+1] übereinstimmt. Das Aufteilen verhält sich identisch mit der Feldauswertung.
sprintf(fmt, expr-list) Gibt expr-list gemäß fmt aus und gibt die resultierende Zeichenkette zurück.
strtonum(str) Untersucht str und gibt dessen numerischen Wert zurück. Wenn str mit einer führenden 0 beginnt, wird es als Oktalziffer behandelt. Wenn str mit einer führenden 0x oder 0X beginnt, wird es als Hexadezimalzahl behandelt. Andernfalls wird davon ausgegangen, dass es sich um eine Dezimalzahl handelt.
sub(r, s [, t]) Genau wie gsub(), ersetzt aber nur die erste übereinstimmende Teilzeichenkette. Gibt entweder null oder eins zurück.
substr(s, i [, n]) Gibt die höchstens n-zeichentiefe Teilzeichenkette von s, die bei i beginnt, zurück. Wenn n weggelassen wird, wird der Rest von s verwendet.
tolower(str) Gibt eine Kopie der Zeichenkette str zurück, wobei alle Großbuchstaben in str in ihre entsprechenden Kleinbuchstaben umgewandelt werden. Nicht-alphabetische Zeichen bleiben unverändert.
toupper(str) Gibt eine Kopie der Zeichenkette str zurück, wobei alle Kleinbuchstaben in str in ihre entsprechenden Großbuchstaben umgewandelt werden. Nicht-alphabetische Zeichen bleiben unverändert.
Gawk ist multibyte-fähig. Das bedeutet, dass index(), length(), substr() und match() alle in Bezug auf Zeichen und nicht auf Bytes arbeiten.
Zeitfunktionen
Gawk stellt die folgenden Funktionen zum Abrufen von Zeitstempeln und zum Formatieren bereit. Einzelheiten finden Sie unter https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.
mktime(datespec [, utc-flag])
Wandelt datespec in einen Zeitstempel des gleichen Formats um, das von systime() zurückgegeben wird, und gibt das Ergebnis zurück. Wenn utc-flag vorhanden ist und einen Wert ungleich Null oder nicht leer hat, wird angenommen, dass die Zeit in der UTC-Zeitzone angegeben ist; andernfalls wird angenommen, dass die Zeit in der lokalen Zeitzone angegeben ist. Wenn datespec nicht genügend Elemente enthält oder wenn die resultierende Zeit außerhalb des Bereichs liegt, gibt mktime() -1 zurück. Siehe https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions für die Details von datespec.
strftime([format [, timestamp[, utc-flag]]])
Formatiert timestamp gemäß der in format angegebenen Spezifikation. Wenn utc-flag vorhanden ist und einen Wert ungleich Null oder nicht leer hat, ist das Ergebnis in UTC, andernfalls ist das Ergebnis in der lokalen Zeit. Der Zeitstempel sollte das gleiche Format haben wie das, das von systime() zurückgegeben wird. Wenn timestamp fehlt, wird die aktuelle Tageszeit verwendet. Wenn format fehlt, wird ein Standardformat verwendet, das dem der Ausgabe von date(1) entspricht. Das Standardformat ist in PROCINFO["strftime"] verfügbar. Siehe die Spezifikation für die Funktion strftime() in ISO C, um die Formatierungsanweisungen zu erhalten, die garantiert verfügbar sind.
systime() Gibt die aktuelle Tageszeit als die Anzahl der Sekunden seit der Epoche (1970-01-01 0000:00 UTC auf POSIX-Systemen) zurück.
Bitmanipulationsfunktionen
Gawk stellt die folgenden Bitmanipulationsfunktionen bereit. Sie funktionieren, indem sie Gleitkommazahlen doppelter Genauigkeit in Ganzzahlen vom Typ uintmax_t konvertieren, die Operation ausführen und dann das Ergebnis wieder in eine Gleitkommazahl konvertieren. Das Übergeben negativer Operanden an eine dieser Funktionen führt zu einem fatalen Fehler.
Die Funktionen sind:
and(v1, v2 [, ...]) Gibt das bitweise UND der in der Argumentliste angegebenen Werte zurück. Es müssen mindestens zwei vorhanden 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 wurde.
or(v1, v2 [, ...]) Gibt das bitweise ODER der in der Argumentliste angegebenen Werte zurück. Es müssen mindestens zwei vorhanden sein.
rshift(val, count) Gibt den Wert von `val` zurück, der um `count` Bits nach rechts verschoben wurde.
xor(v1, v2 [, ...]) Gibt das bitweise XOR der in der Argumentliste angegebenen Werte zurück. Es müssen mindestens zwei vorhanden sein.
Typfunktionen
Die folgenden Funktionen geben typbezogene Informationen über ihre Argumente zurück.
isarray(x) Gibt `true` zurück, wenn `x` ein Array ist, andernfalls `false`.
typeof(x) Gibt eine Zeichenkette zurück, die den Typ von `x` angibt. Die Zeichenkette ist entweder "array", "number", "regexp", "string", "strnum", "unassigned" oder "undefined".
Funktionen für die Internationalisierung
Die folgenden Funktionen können in Ihrem AWK-Programm verwendet werden, um Zeichenketten zur Laufzeit zu übersetzen. Für weitere Details siehe https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.
bindtextdomain(verzeichnis [, domäne])
Gibt das Verzeichnis an, in dem gawk nach den .gmo-Dateien sucht, falls diese nicht oder nicht in den „Standard“-Verzeichnissen platziert werden können. Es gibt das Verzeichnis zurück, in dem die Domäne „gebunden“ ist. Die Standarddomäne ist der Wert von TEXTDOMAIN. Wenn verzeichnis eine leere Zeichenkette ("") ist, gibt bindtextdomain() die aktuelle Bindung für die angegebene Domäne zurück.
dcgettext(zeichenkette [, domäne [, kategorie]])
Gibt die Übersetzung von zeichenkette in der Textdomäne domäne für die Lokalisierungskategorie kategorie zurück. Der Standardwert für domäne ist der aktuelle Wert von TEXTDOMAIN. Der Standardwert für kategorie ist "LC_MESSAGES".
dcngettext(zeichenkette1, zeichenkette2, anzahl [, domäne [, kategorie]])
Gibt die Pluralform der Übersetzung von zeichenkette1 und zeichenkette2 in der Textdomäne domäne für die Lokalisierungskategorie kategorie zurück, die für die anzahl verwendet wird. Der Standardwert für domäne ist der aktuelle Wert von TEXTDOMAIN. Der Standardwert für kategorie ist "LC_MESSAGES".
Boolesche Funktionswerte
Sie können spezielle boolesche Werte erstellen; siehe das Handbuch, um mehr darüber zu erfahren, wie sie funktionieren und warum sie existieren.
mkbool(ausdruck)
Gibt basierend auf dem booleschen Wert des Ausdrucks entweder einen wahren oder einen falschen Wert zurück. Wahre Werte haben den numerischen Wert eins. Falsche Werte haben den numerischen Wert null.
VOM BENUTZER DEFINIERTE FUNKTIONEN
Funktionen in AWK werden wie folgt definiert:
function name(Parameterliste) { Anweisungen }
Funktionen werden ausgeführt, wenn sie von innerhalb von Ausdrücken in Mustern oder Aktionen aufgerufen werden. Die tatsächlich in dem Funktionsaufruf übergebenen Parameter werden verwendet, um die in der Funktion deklarierten formalen Parameter zu instanziieren. Arrays werden per Referenz übergeben, andere Variablen werden per Wert übergeben.
Lokale Variablen werden als zusätzliche Parameter in der Parameterliste deklariert. Die Konvention besteht darin, lokale Variablen von echten Parametern durch zusätzliche Leerzeichen in der Parameterliste zu trennen. Zum Beispiel:
function f(p, q, a, b) # a und b sind lokal
{
...
}
/abc/ { ... ; f(1, 2) ; ... }
Die linke Klammer in einem Funktionsaufruf muss unmittelbar auf den Funktionsnamen folgen, ohne Leerzeichen dazwischen. Diese Einschränkung gilt nicht für die oben aufgeführten eingebauten Funktionen.
Funktionen können einander aufrufen und können rekursiv sein. Funktionsparameter, die als lokale Variablen verwendet werden, werden bei der Funktionsaufrufung mit der leeren Zeichenkette und der Null initialisiert.
Verwenden Sie return ausdruck, um einen Wert von einer Funktion zurückzugeben. Der Rückgabewert ist undefiniert, wenn kein Wert angegeben wird oder wenn die Funktion durch „Auslaufen“ am Ende zurückkehrt.
Funktionen können indirekt aufgerufen werden. Um dies zu tun, weisen Sie den Namen der aufzurufenden Funktion als Zeichenkette einer Variablen zu. Verwenden Sie dann die Variable, als ob es sich um den Namen einer Funktion handeln würde, versehen mit einem @-Zeichen, wie folgt: function myfunc() { print "myfunc called" ... }
{ ...
the_func = "myfunc"
@the_func() # Aufruf über the_func zu myfunc
...
}
Wenn die Option --lint angegeben wurde, warnt gawk beim Parsen vor Aufrufen von nicht definierten Funktionen, anstatt zur Laufzeit. Das Aufrufen einer nicht definierten Funktion zur Laufzeit ist ein schwerwiegender Fehler.
DYNAMISCHES LADEN NEUER FUNKTIONEN
Sie können neue Funktionen, die in C oder C++ geschrieben sind, dynamisch zum laufenden gawk-Interpreter hinzufügen, indem Sie die Anweisung @load verwenden. Die vollständigen Details gehen über den Umfang dieser Handbuchseite hinaus; 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 er ein Profil und einen Funktionsaufrufstapel in die Profildatei schreibt, die entweder awkprof.out oder eine Datei ist, die mit der Option --profile benannt wurde. Anschließend wird die Ausführung fortgesetzt. SIGHUP bewirkt, dass gawk das Profil und den Funktionsaufrufstapel schreibt und dann beendet wird.
INTERNATIONALISIERUNG
String-Konstanten sind Zeichenfolgen, die in doppelte Anführungszeichen eingeschlossen sind. In nicht-englischen Umgebungen ist es möglich, Zeichenfolgen im AWK-Programm so zu kennzeichnen, dass sie in die lokale natürliche Sprache übersetzt werden müssen. 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 ausgeben. Siehe https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization für die Schritte, die für die Erstellung und Ausführung eines lokalisierbaren AWK-Programms erforderlich sind.
GNU-ERWEITERUNGEN
Gawk hat eine zu große Anzahl von Erweiterungen zu POSIX awk. Diese sind unter https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html beschrieben. Alle Erweiterungen können deaktiviert werden, indem gawk mit den Optionen --traditional oder --posix aufgerufen wird.
UMGEBUNGSVARIABLEN
Die Umgebungsvariable AWKPATH kann verwendet werden, um eine Liste von Verzeichnissen anzugeben, in denen gawk beim Suchen nach Dateien sucht, die über die Optionen -f, --file, -i und --include sowie die Direktive @include angegeben werden. Wenn die anfängliche 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 anzugeben, in denen gawk beim Suchen nach Dateien sucht, die über die Optionen -l und --load angegeben werden.
Die Umgebungsvariable GAWK_PERSIST_FILE gibt, falls vorhanden, eine Datei an, die als Speicher für persistente Daten verwendet werden soll. Siehe GAWK: Effective AWK Programming für Einzelheiten.
Die Umgebungsvariable GAWK_READ_TIMEOUT kann verwendet werden, um einen Timeout 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 steuern GAWK_SOCK_RETRIES die Anzahl der Wiederholungen und GAWK_MSEC_SLEEP das Intervall zwischen den Wiederholungen. Das Intervall wird in Millisekunden angegeben. Auf Systemen, die usleep(3) nicht unterstützen, wird der Wert auf die nächste 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 Warnmeldung aus, die dies angibt.
BEENDIGUNGSSTATUS
Wenn die exit-Anweisung mit einem Wert verwendet wird, beendet gawk das Programm mit dem angegebenen numerischen Wert.
Andernfalls beendet gawk das Programm mit dem Wert der C-Konstanten EXIT_SUCCESS, wenn während der Ausführung keine Probleme aufgetreten sind. Dies ist normalerweise null.
Wenn ein Fehler auftritt, beendet gawk das Programm mit dem Wert der C-Konstanten EXIT_FAILURE. Dies ist normalerweise eins.
Wenn gawk aufgrund eines schwerwiegenden Fehlers beendet wird, ist der Beendigungsstatus 2. Auf nicht-POSIX-Systemen kann dieser Wert auf EXIT_FAILURE abgebildet werden.
VERSIONINFORMATIONEN
Diese Manpage dokumentiert gawk, Version 5.3.
AUTOREN
Die ursprüngliche Version von UNIX awk wurde von Alfred Aho, Peter Weinberger und Brian Kernighan von Bell Laboratories entworfen und implementiert. Ozan Yigit ist der aktuelle Betreuer. Brian Kernighan beteiligt sich gelegentlich an der Entwicklung.
Paul Rubin und Jay Fenlason von der Free Software Foundation schrieben gawk, um es mit der ursprünglichen Version von awk, die in Seventh Edition UNIX verteilt wurde, kompatibel zu machen. John Woods trug eine Reihe von Fehlerbehebungen bei. David Trueman hat mit Beiträgen von Arnold Robbins gawk mit der neuen Version von UNIX awk kompatibel gemacht. Arnold Robbins ist der aktuelle Betreuer.
Eine vollständige Liste der Mitwirkenden von gawk und seiner Dokumentation finden Sie in GAWK: Effective AWK Programming.
Die aktuelle Datei README in der gawk-Distribution enthält aktuelle Informationen über Betreuer und welche Ports derzeit unterstützt werden.
FEHLERBERICHTE UND FRAGEN
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. Dies wird die Fehlerberichterstattung und -behebung für alle Beteiligten erheblich erleichtern. Wirklich.
Wenn Sie andererseits eine Frage dazu haben, wie Sie eine bestimmte Aufgabe mit awk oder gawk ausführen können, senden Sie eine E-Mail an _ mit Ihrer Anfrage um Hilfe.
FEHLER
Die Option -F ist angesichts der Befehlszeilen-Variablenzuordnungsfunktion nicht erforderlich; sie wird nur zur Abwärtskompatibilität beibehalten.
Diese Manpage ist zu lang; gawk hat zu viele Funktionen.
SIEHE AUCH
^ grep(1), sed(1), gawkbug(1), printf(3) und strftime(3).
The AWK Programming Language, zweite Auflage, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 2023. ISBN 9-780138-269722.
GAWK: Effective AWK Programming, Edition 5.3, wird mit dem gawk-Quellcode ausgeliefert. Die aktuelle Version dieses Dokuments ist online unter https://www.gnu.org/software/gawk/manual verfügbar.
Die GNU gettext-Dokumentation ist online unter https://www.gnu.org/software/gettext verfügbar.
BEISPIELE
Drucken und sortieren Sie die Login-Namen aller Benutzer:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Zählen Sie die Zeilen in einer Datei:
{ nlines++ }
END { print nlines }
Fügen Sie jeder Zeile ihre Zeilennummer in der Datei voran:
{ print FNR, $0 }
Verketten und Zeilennummer (eine Variation des Themas):
{ print NR, $0 }
Führen Sie einen externen Befehl für bestimmte Datenzeilen aus:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'
KOPIERRECHTLICHE BESTIMMUNGEN
Copyright © 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, 2023 2024, 2025 Free Software Foundation, Inc.
Es wird die Erlaubnis erteilt, wörtliche Kopien dieser Handbuchseite zu erstellen und zu verteilen, vorausgesetzt, dass der Copyright-Hinweis und dieser Erlaubnishinweis auf allen Kopien beibehalten werden.
Es wird die Erlaubnis erteilt, modifizierte Versionen dieser Handbuchseite unter den Bedingungen für das wörtliche Kopieren zu kopieren und zu verteilen, vorausgesetzt, dass das gesamte resultierende abgeleitete Werk unter den Bedingungen eines Erlaubnishinweises verteilt wird, der diesem identisch ist.
Es wird die Erlaubnis erteilt, Übersetzungen dieser Handbuchseite in eine andere Sprache zu kopieren und zu verteilen, unter den oben genannten Bedingungen für modifizierte Versionen, mit der Ausnahme, dass dieser Erlaubnishinweis in einer vom Foundation genehmigten Übersetzung angegeben werden kann.