Skip to main content

Gawk - Linux-Befehl - Unix-Befehl

AWK w 10 minut - kurs programowania w języku AWK (Juni 2026)

AWK w 10 minut - kurs programowania w języku AWK (Juni 2026)
Anonim

Name

Sprache für das Scannen und Verarbeiten von Mustern

Zusammenfassung

gaffen POSIX- oder GNU-Stiloptionen -f Programmdatei -- Datei …gaffen POSIX- oder GNU-Stiloptionen -- Programmtext Datei …

Pgawk POSIX- oder GNU-Stiloptionen -f Programmdatei -- Datei …Pgawk POSIX- oder GNU-Stiloptionen -- Programmtext Datei …

Beschreibung

Gaffen ist die Implementierung der Programmiersprache AWK durch das GNU-Projekt. Es entspricht der Definition der Sprache im POSIX 1003.2 Command Language And Utilities-Standard. Diese Version basiert wiederum auf der Beschreibung in Die AWK-Programmiersprache von Aho, Kernighan und Weinberger mit den zusätzlichen Funktionen der System V Release 4-Version von UNIX awk . Gaffen bietet auch neuere Bell Laboratories awk Erweiterungen und eine Reihe von GNU-spezifischen Erweiterungen.

Pgawk ist die Profilierungsversion von gaffen . Es ist in jeder Hinsicht identisch mit gaffen , mit der Ausnahme, dass Programme langsamer ausgeführt werden und automatisch ein Ausführungsprofil in der Datei erstellt wird awkprof.out wenn fertig Siehe die --Profil Option unten.

Die Befehlszeile besteht aus Optionen zu gaffen selbst den AWK-Programmtext (falls nicht über das -f oder --Datei Optionen) und Werte, die in der Datenbank zur Verfügung gestellt werden sollen ARGC und ARGV vordefinierte AWK-Variablen.

Optionsformat

Gaffen Optionen können entweder herkömmliche POSIX-Einbuchstaben-Optionen oder GNU-Stil-lange Optionen sein. POSIX-Optionen beginnen mit einem einzelnen `` - '', während lange Optionen mit `` - '' beginnen. Lange Optionen stehen sowohl für GNU-spezifische Funktionen als auch für POSIX-spezifische Funktionen zur Verfügung.

Dem POSIX-Standard folgend, gaffen -spezifische Optionen werden über Argumente an die übergeben -W Möglichkeit. Mehrere -W Optionen können jeweils geliefert werden -W Option hat eine entsprechende lange Option, wie unten beschrieben. Argumente für lange Optionen werden entweder mit der Option durch ein = Zeichen, ohne Leerzeichen, oder sie können im nächsten Befehlszeilenargument angegeben werden. Lange Optionen können abgekürzt werden, solange die Abkürzung eindeutig bleibt.

Optionen

Gaffen akzeptiert die folgenden Optionen, alphabetisch aufgelistet.

-F fs

- Feldtrennzeichen fs Benutzen fs für das Eingabefeldtrennzeichen (der Wert von FS vordefinierte Variable).

-v var = val

--zuordnen var = val Weisen Sie den Wert zu val auf die Variable var , bevor die Ausführung des Programms beginnt. Solche Variablenwerte stehen dem zur Verfügung START Block eines AWK-Programms.

-f Programmdatei

--Datei Programmdatei Lesen Sie die AWK-Programmquelle aus der Datei Programmdatei , anstatt vom ersten Befehlszeilenargument. Mehrere -f (oder --Datei) Optionen können verwendet werden.

-mf NNN

-Herr NNN Stellen Sie verschiedene Speichergrenzen für den Wert ein NNN . Das f Flag legt die maximale Anzahl von Feldern fest und die r Flag legt die maximale Datensatzgröße fest. Diese beiden Flaggen und die -m Option sind aus der Bell Laboratories-Forschungsversion von UNIX awk . Sie werden von ignoriert gaffen , schon seit gaffen hat keine vordefinierten Grenzen.

-Watt

- traditionell

--compat

--traditionell Einlaufen Kompatibilität Modus. Im Kompatibilitätsmodus gaffen verhält sich identisch zu UNIX awk ; Keine der GNU-spezifischen Erweiterungen wird erkannt. Die Verwendung von --traditionell wird gegenüber den anderen Formen dieser Option bevorzugt. Sehen GNU ERWEITERUNGENweiter unten für weitere Informationen.

-W Copyleft

-W Urheberrecht

--copyleft

--Urheberrechte © Drucken Sie die Kurzversion der GNU-Copyright-Informationsnachricht auf die Standardausgabe und beenden Sie den Vorgang erfolgreich.

-W Dump-Variablen= Datei

- Dump-Variablen= Datei Drucken Sie eine sortierte Liste globaler Variablen, deren Typen und Endwerte aus Datei . Wenn nein Datei wird gestellt, gaffen verwendet eine Datei mit dem Namen awkvars.out im aktuellen Verzeichnis.

Eine Liste aller globalen Variablen ist eine gute Möglichkeit, in Ihren Programmen nach typografischen Fehlern zu suchen. Sie würden diese Option auch verwenden, wenn Sie ein großes Programm mit vielen Funktionen haben und sicherstellen möchten, dass Ihre Funktionen nicht versehentlich globale Variablen verwenden, die Sie als lokal definieren wollten. (Dies ist ein besonders einfacher Fehler, der mit einfachen Variablennamen wie gemacht wird ich, j, und so weiter.)

-Wir helfen

-W Nutzung

--Hilfe

--Verwendungszweck Drucken Sie eine relativ kurze Zusammenfassung der verfügbaren Optionen in der Standardausgabe. (Per die GNU-Codierungsstandards Diese Optionen bewirken ein sofortiges, erfolgreiches Beenden.)

- Fussel= tödlich

--Fussel= tödlich Stellen Sie Warnungen vor Konstrukten bereit, die für andereAWK-Implementierungen zweifelhaft oder nicht portierbar sind. Mit einem optionalen Argument von tödlich, Fusselwarnungen werden zu schwerwiegenden Fehlern. Dies kann drastisch sein, aber seine Verwendung wird sicherlich die Entwicklung sauberer AWK-Programme fördern.

-Wassfuss alt

--lint-alt Warnungen vor Konstrukten bereitstellen, die nicht auf die Originalversion von Unix portierbar sind awk .

-W Gen-Po

--gen-po Scannen und parsen Sie das AWK-Programm und generieren Sie eine GNU .po Formatdatei in der Standardausgabe mit Einträgen für alle lokalisierbaren Zeichenfolgen im Programm. Das Programm selbst wird nicht ausgeführt. Siehe die GNU gettext Verteilung für weitere Informationen über .po Dateien.

-W nicht dezimale Daten

- Nicht-Dezimal-Daten Erkennen Sie Oktal- und Hexadezimalwerte in Eingabedaten. Verwenden Sie diese Option mit großer Vorsicht!

-W posix

--posix Das schaltet sich ein Kompatibilität Modus mit den folgenden zusätzlichen Einschränkungen:

*

x Escape-Sequenzen werden nicht erkannt.

*

Nur Leerzeichen und Tabs dienen als Feldtrennzeichen, wenn FS wird auf ein einzelnes Leerzeichen gesetzt, Newline nicht.

*

Sie können die Zeilen danach nicht fortsetzen ? und :.

*

Das Synonym func für das Stichwort Funktion wird nicht erkannt.

*

Die Betreiber ** und **= kann nicht anstelle von verwendet werden ^ und ^=.

*

Das fflush () Funktion ist nicht verfügbar.

-W Profil= prof_file

--Profil= prof_file Profildaten an senden prof_file . Der Standardwert ist awkprof.out. Wenn mit laufen gaffen Das Profil ist nur eine "hübsch gedruckte" Version des Programms. Wenn mit laufen Pgawk Das Profil enthält die Ausführungszählungen jeder Anweisung im Programm am linken Rand und die Funktionsaufrufe für jede benutzerdefinierte Funktion.

-W Wiederintervall

--re-Intervall Aktivieren Sie die Verwendung von Intervallausdrücke im regulären Ausdruck (siehe Reguläre Ausdrückeunten). Intervallausdrücke waren traditionell nicht in der AWK-Sprache verfügbar. Der POSIX-Standard fügte sie hinzu awk und Egrep im Einklang miteinander. Ihre Verwendung wird jedoch wahrscheinlich alte AWK-Programme brechen gaffen liefert sie nur, wenn sie mit dieser Option angefordert werden oder wann --posix angegeben.

-W Quelle Programmtext

--Quelle Programmtext Benutzen Programmtext als AWK-Programmquellcode. Diese Option ermöglicht das einfache Mischen von Bibliotheksfunktionen (die über die -f und --Datei Optionen) mit dem in der Befehlszeile eingegebenen Quellcode. Es ist hauptsächlich für mittlere bis große AWK-Programme in Shell-Skripten gedacht.

-W-Version

--Ausführung Versionsinformationen für diese bestimmte Version von drucken gaffen auf der Standardausgabe. Dies ist vor allem hilfreich, wenn Sie wissen, ob die aktuelle Kopie von gaffen Ihr System ist auf dem neuesten Stand in Bezug auf das, was die Free Software Foundation vertreibt. Dies ist auch nützlich, wenn Fehler gemeldet werden. (Per die GNU-Codierungsstandards Diese Optionen bewirken ein sofortiges, erfolgreiches Beenden.)

-- Ende der Optionen anzeigen. Dies ist nützlich, um weitere Argumente für das AWK-Programm selbst zuzulassen, um mit einem `` - '' zu beginnen. Dies dient hauptsächlich der Konsistenz mit der Argument-Parsing-Konvention, die von den meisten anderen POSIX-Programmen verwendet wird.

Im Kompatibilitätsmodus werden alle anderen Optionen als ungültig markiert, ansonsten jedoch ignoriert. Solange Programmtext geliefert wird, werden im Normalbetrieb unbekannte Optionen an das AWK-Programm im übergeben ARGV Array zur Verarbeitung. Dies ist besonders nützlich, wenn Sie AWK-Programme über den ausführbaren Interpreter-Mechanismus "#!" Ausführen.

AWK-PROGRAMM-AUSFÜHRUNG

Ein AWK-Programm besteht aus einer Folge von Musteraktionsanweisungen und optionalen Funktionsdefinitionen.

Muster { Aktionsaussagen }Funktion Name ( Parameterliste ) { Aussagen }

Gaffen liest zuerst die Programmquelle aus Programmdatei (s) falls angegeben, von Argumenten bis --Quelleoder aus dem ersten Nichtoptionsargument in der Befehlszeile. Das -f und --Quelle Optionen können in der Befehlszeile mehrfach verwendet werden. Gaffen liest den Programmtext als ob alle Programmdatei s und Befehlszeilenquelltexte wurden miteinander verkettet. Dies ist nützlich, um Bibliotheken mit AWK-Funktionen zu erstellen, ohne sie in jedes neue AWK-Programm, das sie verwendet, aufzunehmen. Es bietet auch die Möglichkeit, Bibliotheksfunktionen mit Befehlszeilenprogrammen zu mischen.

Die Umgebungsvariable AWKPATH Gibt einen Suchpfad an, der beim Suchen von Quelldateien mit dem Namen verwendet werden soll -f Möglichkeit. Wenn diese Variable nicht vorhanden ist, lautet der Standardpfad".: / usr / local / share / awk". (Das tatsächliche Verzeichnis kann abhängig von der Vorgehensweise variieren gaffen wurde erstellt und installiert.) Wenn dem Dateinamen ein Dateiname -f Option enthält ein `` / '' Zeichen, es wird keine Pfadsuche durchgeführt.

Gaffen führt AWK-Programme in der folgenden Reihenfolge aus. Zunächst alle über die angegebenen Variablenzuweisungen -v Option ausgeführt werden. Nächster, gaffen kompiliert das Programm in eine interne Form. Dann, gaffen führt den Code im aus START Block (s) (falls vorhanden) und liest dann jede in der Datei benannte Datei ARGV Array. Wenn in der Befehlszeile keine Dateien angegeben sind, gaffen liest die Standardeingabe.

Wenn ein Dateiname in der Befehlszeile das Formular enthält var = val es wird als eine variable Zuordnung behandelt. Die Variable var wird der Wert zugewiesen val . (Dies geschieht nach jedem START Blöcke wurden ausgeführt.) Die Zuweisung von Befehlszeilenvariablen ist am nützlichsten, um den Variablen dynamisch Werte zuzuweisen, die AWK verwendet, um zu steuern, wie die Eingabe in Felder und Datensätze aufgeteilt wird. Es ist auch nützlich für die Statuskontrolle, wenn mehrere Durchläufe über eine einzige Datendatei erforderlich sind.

Wenn der Wert eines bestimmten Elements von ARGV ist leer (''), gaffen überspringt es.

Für jeden Datensatz in der Eingabe gaffen testet, ob es mit einem übereinstimmt Muster im AWK-Programm. Für jedes Muster, dem der Datensatz entspricht, das zugeordnete Muster Aktion ausgeführt wird. Die Muster werden in der Reihenfolge getestet, in der sie im Programm vorkommen.

Schließlich, nachdem alle Eingaben erschöpft sind, gaffen führt den Code im aus ENDE Block (s) (falls vorhanden).

Variablen, Datensätze und Felder

AWK-Variablen sind dynamisch; Sie entstehen, wenn sie zum ersten Mal benutzt werden. Ihre Werte sind entweder Gleitkommazahlen oder Strings oder beide, je nachdem, wie sie verwendet werden. AWK hat auch eindimensionale Arrays. Arrays mit mehreren Dimensionen können simuliert werden. Während des Programmablaufs werden mehrere vordefinierte Variablen festgelegt. Diese werden nach Bedarf beschrieben und im Folgenden zusammengefasst.

Aufzeichnungen

Normalerweise werden Datensätze durch Zeilenumbrüche getrennt. Sie können steuern, wie Datensätze getrennt werden, indem Sie der integrierten Variablen Werte zuweisen RS. Ob RS ist ein einzelnes Zeichen, das die Datensätze trennt. Andernfalls, RS ist ein regulärer Ausdruck. Text in der Eingabe, der diesem regulären Ausdruck entspricht, trennt den Datensatz. Im Kompatibilitätsmodus wird jedoch nur das erste Zeichen des Zeichenfolgenwerts zum Trennen von Datensätzen verwendet. Ob RS auf null gesetzt, werden die Datensätze durch Leerzeilen getrennt. Wann RS Wenn die Zeichenfolge null ist, fungiert das Zeilenvorschubzeichen neben dem Wert immer als Feldtrennzeichen FS könnte haben.

Felder

Wenn jeder Eingabesatz gelesen wird, gaffen teilt den Datensatz auf Felder mit dem Wert von FS Variable als Feldtrennzeichen. Ob FS ist ein einzelnes Zeichen, Felder werden durch dieses Zeichen getrennt. Ob FS ist die Nullzeichenfolge, dann wird jedes einzelne Zeichen zu einem separaten Feld. Andernfalls, FS Es wird erwartet, dass es sich um einen vollständigen regulären Ausdruck handelt. Im besonderen Fall das FS ist ein einzelnes Leerzeichen, Felder werden durch Reihen von Leerzeichen und / oder Registerkarten und / oder Zeilenumbrüchen getrennt. (Siehe aber die Diskussion von --posixunten). HINWEIS: Der Wert von FALL IGNORIEREN (siehe unten) beeinflusst auch, wie Felder aufgeteilt werden FS ist ein regulärer Ausdruck und wie Datensätze wann getrennt werden RS ist ein regulärer Ausdruck.

Wenn die FELDWIDTHS Für die Variable wird eine durch Leerzeichen getrennte Liste mit Zahlen festgelegt. Jedes Feld hat eine feste Breite gaffen teilt den Datensatz mit den angegebenen Breiten auf. Der Wert von FS wird ignoriert. Neuen Wert zuweisen FS überschreibt die Verwendung von FELDWIDTHSund stellt das Standardverhalten wieder her.

Jedes Feld im Eingabesatz kann über seine Position referenziert werden. $1, $2, und so weiter. $0 ist der ganze Rekord. Felder müssen nicht durch Konstanten referenziert werden:

n = 5print $ n

druckt das fünfte Feld im Eingabesatz.

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

Verweise auf nicht vorhandene Felder (d. H. Felder nach $ NF) erzeugen die Nullzeichenfolge. Zuweisen zu einem nicht vorhandenen Feld (z. B. $ (NF + 2) = 5) erhöht den Wert von NFerstellt alle dazwischenliegenden Felder mit der Nullzeichenfolge als Wert und bewirkt den Wert von $0 neu berechnet werden, wobei die Felder durch den Wert von getrennt werden OFS. Verweise auf negativ nummerierte Felder verursachen einen schwerwiegenden Fehler. Dekrementieren NF bewirkt, dass die Werte von Feldern nach dem neuen Wert und der Wert von verloren gehen $0 neu berechnet werden, wobei die Felder durch den Wert von getrennt werden OFS.

Wenn Sie einem vorhandenen Feld einen Wert zuweisen, wird der gesamte Datensatz neu erstellt $0 wird referenziert. Analog dazu einen Wert zuweisen $0 bewirkt, dass der Datensatz erneut aufgeteilt wird, wodurch neue Werte für die Felder erstellt werden.

Eingebaute Variablen

Gaffen Die eingebauten Variablen sind:

ARGC

Die Anzahl der Befehlszeilenargumente (enthält keine Optionen für gaffen oder die Programmquelle).

ARGIND

Der Index in ARGV der aktuell verarbeiteten Datei.

ARGV

Array von Befehlszeilenargumenten. Das Array ist von 0 bis indiziert ARGC - 1. Dynamisches Ändern des Inhalts von ARGV kann die für die Daten verwendeten Dateien steuern.

BINMODE

Gibt auf Nicht-POSIX-Systemen die Verwendung des Binärmodus für alle Datei-E / A an. Numerische Werte von 1, 2 oder 3 geben an, dass Eingabedateien, Ausgabedateien bzw. alle Dateien binäre E / A verwenden sollen. Stringwerte von "r", oder "w" Geben Sie an, dass Eingabedateien bzw. Ausgabedateien binäre E / A verwenden sollen. Stringwerte von "rw" oder "wr" Geben Sie an, dass alle Dateien binäre E / A verwenden sollen. Jeder andere String-Wert wird als behandelt "rw", erzeugt aber eine Warnmeldung.

CONVFMT

Das Konvertierungsformat für Zahlen "% 0,6 g", standardmäßig.

UMGEBUNG

Ein Array, das die Werte der aktuellen Umgebung enthält. Das Array wird durch die Umgebungsvariablen indiziert, wobei jedes Element der Wert dieser Variablen ist (z. B.UMGEBUNG "HOME" könnte sein / home / arnold). Das Ändern dieses Arrays wirkt sich nicht auf die Umgebung aus, in der die Programme dies sehen gaffen Laich durch Umleitung oder die System()Funktion.

ERRNO

Wenn ein Systemfehler auftritt, führen Sie entweder eine Umleitung für aus Getline, während eines Lesens für Getlineoder während eines schließen(), dann ERRNO enthält eine Zeichenfolge, die den Fehler beschreibt. Der Wert unterliegt der Übersetzung in nicht englischsprachigen Gebieten.

FELDWIDTHS

Eine durch Leerzeichen getrennte Liste von Feldbreiten. Wenn eingestellt, gaffen parst die Eingabe in Felder fester Breite, anstatt den Wert von zu verwenden FS Variable als Feldtrennzeichen.

DATEINAME

Der Name der aktuellen Eingabedatei.Wenn in der Befehlszeile keine Dateien angegeben sind, ist der Wert von DATEINAME ist `` - ''. Jedoch, DATEINAME ist im undefiniert START block (sofern nicht durch gesetzt Getline).

FNR

Die Nummer des Eingabesatzes in der aktuellen Eingabedatei.

FS

Das Eingabefeldtrennzeichen, standardmäßig ein Leerzeichen. Sehen Felder, über.

FALL IGNORIEREN

Steuert die Groß- und Kleinschreibung aller regulären Ausdrücke und Zeichenfolgenoperationen. Ob FALL IGNORIEREN hat einen Wert ungleich Null, dann Zeichenfolgenvergleiche und Musterübereinstimmung in Regeln, Feldaufteilung mit FS, trennen Sie mit RSregulärer Ausdruck, der mit übereinstimmt ~und !~, und das gensub (), gsub (), Index(), Spiel(), Teilt(), und sub () Integrierte Funktionen ignorieren Groß- und Kleinschreibung bei Operationen mit regulären Ausdrücken. HINWEIS: Array-Subskription ist nicht betroffen, noch ist die asort () Funktion.

Wenn also FALL IGNORIEREN ist nicht gleich null, / aB / passt zu allen Saiten "ab", "aB","Ab", und "AB". Wie bei allen AWK-Variablen der Anfangswert von FALL IGNORIEREN Null ist, so dass bei allen regulären Ausdrücken und Zeichenfolgenvorgängen normalerweise die Groß- und Kleinschreibung beachtet wird. Unter Unix wird der volle Zeichensatz nach ISO 8859-1 Latin-1 verwendet, wenn Groß- und Kleinschreibung ignoriert wird.

FUSSEL

Bietet dynamische Kontrolle über die --Fussel Option aus einem AWK-Programm. Wenn wahr, gaffen druckt Fusselwarnungen aus. Wenn es falsch ist, tut es nicht. Wenn der Stringwert zugewiesen wird "tödlich", Fusselwarnungen werden zu fatalen Fehlern, genau wie --lint = tödlich. Jeder andere wahre Wert druckt nur Warnungen.

NF

Die Anzahl der Felder im aktuellen Eingabesatz.

NR

Die Gesamtzahl der bisher gesehenen Eingabesätze.

OFMT

Das Ausgabeformat für Zahlen "% 0,6 g", standardmäßig.

OFS

Das Ausgabefeld-Trennzeichen, standardmäßig ein Leerzeichen.

ORS

Das Ausgabesatztrennzeichen, standardmäßig ein Zeilenumbruch.

PROCINFO

Die Elemente dieses Arrays bieten Zugriff auf Informationen zum laufenden AWK-Programm. Auf einigen Systemen können Elemente im Array vorhanden sein. "Gruppe 1" durch "Gruppe n ' für einige n Dies ist die Anzahl der zusätzlichen Gruppen, die der Prozess hat. Verwenden Sie die im Operator, um diese Elemente zu testen. Die folgenden Elemente sind garantiert verfügbar:

PROCINFO "egid"

der Wert von getegid (2) Systemaufruf.

PROCINFO "euid"

der Wert von geteuid (2) Systemaufruf.

PROCINFO "FS"

"FS" wenn Feldaufteilung mit FS ist in der Tat oder "FELDWIDTHS" wenn Feldaufteilung mit FELDWIDTHS ist wirksam.

PROCINFO "gid"

der Wert von getgid (2) Systemaufruf.

PROCINFO "pgrpid"

Die Prozessgruppen-ID des aktuellen Prozesses.

PROCINFO "pid"

die Prozess-ID des aktuellen Prozesses.

PROCINFO "ppid"

die übergeordnete Prozess-ID des aktuellen Prozesses.

PROCINFO "UID"

der Wert von getuid (2) Systemaufruf.

RS

Das Eingabesatztrennzeichen, standardmäßig ein Zeilenumbruch.

RT

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

RSTART

Der Index des ersten Zeichens, das mit übereinstimmt Spiel(); 0 wenn keine Übereinstimmung (Dies bedeutet, dass Zeichenindizes bei eins beginnen.)

RLENGTH

Die Länge der Zeichenfolge, die mit übereinstimmt Spiel(); -1 falls keine Übereinstimmung

SUBSEP

Das Zeichen, das standardmäßig zum Trennen mehrerer Subskripte in Arrayelementen verwendet wird ' 034'.

TEXTDOMAIN

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

Arrays

Arrays werden mit einem Ausdruck in eckigen Klammern ( und ). Wenn der Ausdruck eine Ausdrucksliste ist ( Ausdruck , Ausdruck …) dann ist der Array-Index eine Zeichenfolge, die aus der Verkettung des (Zeichenfolge) -Werts jedes Ausdrucks besteht, getrennt durch den Wert von SUBSEP Variable. Diese Funktion wird verwendet, um mehrfach dimensionierte Arrays zu simulieren. Zum Beispiel:

i = "A"; j = "B"; k = "C"x i, j, k = "Hallo, Welt n"

weist die Zeichenfolge zu "Hallo, Welt n" auf das Element des Arrays x welche von der Zeichenfolge indiziert wird"A 034B 034C". Alle Arrays in AWK sind assoziativ, d. H. Nach Stringwerten indiziert.

Der spezielle Operator im kann in einer verwendet werden ob oder während Anweisung, um zu sehen, ob ein Array einen Index hat, der aus einem bestimmten Wert besteht.

if (val in array) Druck-Array val

Wenn das Array mehrere Subskriptionen enthält, verwenden Sie (i, j) in Array.

Das im Konstrukt kann auch in a verwendet werden zum Schleife, um alle Elemente eines Arrays zu durchlaufen.

Ein Element kann mit der Taste aus einem Array gelöscht werden löschen Aussage. Das löschen Die Anweisung kann auch verwendet werden, um den gesamten Inhalt eines Arrays zu löschen, indem Sie einfach den Arraynamen ohne Index angeben.

Variable Typisierung und Konvertierung

Variablen und Felder können (Gleitkommazahlen) oder Strings oder beides sein. Wie der Wert einer Variablen interpretiert wird, hängt vom 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 eine Variable als Zahl zu behandeln, fügen Sie ihr 0 hinzu. verketten Sie es mit der Nullzeichenfolge, um es als Zeichenfolge zu behandeln.

Wenn eine Zeichenfolge in eine Zahl konvertiert werden muss, wird die Konvertierung mit durchgeführt strtod (3). Eine Zahl wird mit dem Wert von in eine Zeichenfolge umgewandelt CONVFMT als Formatstring für Sprintf (3) mit dem numerischen Wert der Variablen als Argument. Obwohl alle Zahlen in AWK Fließkommazahlen sind, sind dies ganzzahlige Werte immer als ganze Zahlen konvertiert. Also gegeben

CONVFMT =% 2.2f a = 12 b = a

Die Variable b hat einen Stringwert von '12' und nicht '12.00'.

Gaffen führt Vergleiche wie folgt aus: Wenn zwei Variablen numerisch sind, werden sie numerisch verglichen. Wenn ein Wert numerisch ist und der andere einen Zeichenfolgenwert hat, der eine numerische Zeichenfolge ist, werden Vergleiche auch numerisch durchgeführt. Andernfalls wird der numerische Wert in einen String konvertiert und ein Stringvergleich wird durchgeführt. Zwei Saiten werden natürlich als Saiten verglichen. Beachten Sie, dass der POSIX-Standard das Konzept der "numerischen Zeichenfolge" überall anwendet, sogar auf Zeichenfolgenkonstanten. Dies ist jedoch eindeutig falsch und gaffen tut das nicht. (Zum Glück ist dies in der nächsten Version des Standards behoben.)

Beachten Sie, dass String-Konstanten wie z '57', sind nicht numerische Zeichenfolgen, sie sind Zeichenfolgekonstanten. Die Idee der "numerischen Zeichenfolge" gilt nur für Felder, Getline Eingang, DATEINAME, ARGV Elemente, UMGEBUNG Elemente und die Elemente eines Arrays erstellt von Teilt() das sind numerische Zeichenfolgen. Die Grundidee ist das Benutzereingabe und nur Benutzereingaben, die numerisch aussehen, sollten auf diese Weise behandelt werden.

Nicht initialisierte Variablen haben den numerischen Wert 0 und den Zeichenfolgewert "" (Null- oder leere Zeichenfolge).

Oktal- und Hexadezimal-Konstanten

Ab Version 3.1 von gawk Sie können in Ihrem AWK-Programmquellcode Oktal- und Hexadezimal-Konstanten im C-Stil verwenden. Zum Beispiel der Oktalwert 011 ist gleich dezimal 9und der Hexadezimalwert 0x11 ist gleich dezimal 17.

String-Konstanten

String-Konstanten in AWK sind Zeichenfolgen, die zwischen doppelten Anführungszeichen stehen ('). Innerhalb von Strings bestimmt Fluchtsequenzen werden wie in C erkannt. Dies sind:

\

Ein buchstäblicher Backslash.

ein

Das Zeichen "alert"; normalerweise das ASCII BEL-Zeichen.

b

Rücktaste.

f

Formular-Feed.

n

Neue Zeile.

r

Wagenrücklauf.

t

horizontale Registerkarte.

v

vertikale Registerkarte.

x Hex-Ziffern

Das Zeichen, das durch die Folge von Hexadezimalziffern dargestellt wird x. Wie in ANSIC werden alle folgenden Hexadezimalziffern als Teil der Escape-Sequenz betrachtet. (Diese Funktion sollte uns etwas über die Sprachgestaltung durch Ausschüsse sagen.) " x1B" ist das ASCIIESC-Zeichen (Escape-Zeichen).

ddd

Das Zeichen, das durch die 1-, 2- oder 3-stellige Folge von Oktalstellen dargestellt wird. Z.B., ' 033' ist das ASCII-ESC (Escape) -Zeichen.

c

Der wörtliche Charakter c .

Die Escape-Sequenzen können auch innerhalb konstanter regulärer Ausdrücke verwendet werden (z./ t f n r v / entspricht Whitespace-Zeichen).

Im Kompatibilitätsmodus werden die Zeichen, die durch oktale und hexadezimale Escape-Sequenzen dargestellt werden, bei Verwendung in regulären Ausdruckskonstanten wörtlich behandelt. Somit, / a 52b / ist äquivalent zu/ a * b /.

Muster und Aktionen

AWK ist eine linienorientierte Sprache. Das Muster kommt zuerst und dann die Aktion. Aktionsanweisungen sind in eingeschlossen { und }. Entweder fehlt das Muster oder die Aktion, aber natürlich nicht beides. Wenn das Muster fehlt, wird die Aktion für jeden einzelnen Eingabesatz ausgeführt. Eine fehlende Aktion ist äquivalent zu

{ drucken }

die den gesamten Datensatz druckt.

Kommentare beginnen mit dem Zeichen `` # 'und werden bis zum Ende der Zeile fortgesetzt. Leerzeilen können verwendet werden, um Anweisungen zu trennen. Normalerweise endet eine Anweisung mit einer neuen Zeile. Dies gilt jedoch nicht für Zeilen, die auf ``, '' enden. {, ?, :, &&, oder ||. Zeilen enden in tun oder sonst Auch ihre Aussagen werden automatisch in der folgenden Zeile fortgesetzt. In anderen Fällen kann eine Zeile fortgesetzt werden, indem sie mit einem 'beendet wird. In diesem Fall wird der Zeilenumbruch ignoriert.

Mehrere Anweisungen können in einer Zeile stehen, indem sie mit einem ``; 'getrennt werden. Dies gilt sowohl für die Anweisungen im Aktionsteil eines Muster-Aktions-Paares (im Normalfall) als auch für die Muster-Aktions-Anweisungen selbst.

Muster

AWK-Muster können eines der folgenden sein:

START ENDE / regulären Ausdruck / relationaler Ausdruck Muster && Muster Muster || Muster Muster ? Muster : Muster ( Muster ) ! Muster pattern1 , pattern2

START und ENDE sind zwei spezielle Arten von Mustern, die nicht anhand der Eingabe getestet werden. Die Handlungsteile von allen START Muster werden so zusammengefügt, als wären alle Anweisungen in einem einzigen geschrieben START Block. Sie werden ausgeführt, bevor eine Eingabe gelesen wird. Ebenso alle ENDE Blöcke werden zusammengeführt und ausgeführt, wenn alle Eingaben erschöpft sind (oder wenn eine Ausfahrt Anweisung wird ausgeführt). START und ENDE Muster können in Musterausdrücken nicht mit anderen Mustern kombiniert werden. START und ENDE Muster können keine fehlenden Aktionsteile haben.

Zum / regulären Ausdruck / Wird die zugehörige Anweisung für jeden Eingabedatensatz ausgeführt, der dem regulären Ausdruck entspricht. Reguläre Ausdrücke sind die gleichen wie in Egrep (1) und sind nachstehend zusammengefasst.

EIN relationaler Ausdruck kann einen der im Abschnitt über Aktionen definierten Operatoren verwenden. Diese testen im Allgemeinen, ob bestimmte Felder bestimmten regulären Ausdrücken entsprechen.

Das &&, ||, und ! Operatoren sind logisch UND, logisch ODER bzw. logisch NICHT wie in C. Sie führen eine Kurzschlussauswertung wie in C durch und werden zum Kombinieren von primitiveren Musterausdrücken verwendet. Wie in den meisten Sprachen können Klammern verwendet werden, um die Reihenfolge der Auswertung zu ändern.

Das ?: Operator ist derselbe Operator in C. Wenn das erste Muster wahr ist, ist das zum Testen verwendete Muster das zweite Muster, andernfalls ist es das dritte Muster. Nur eines der zweiten und dritten Muster wird ausgewertet.

Das pattern1 , pattern2 Form eines Ausdrucks heißt a Bereichsmuster . Es stimmt mit allen Eingabedatensätzen überein, die mit einem passenden Datensatz beginnen pattern1 und bis zu einem passenden Datensatz fortfahren pattern2 inklusive. Es kann nicht mit anderen Musterausdrücken kombiniert werden.

Reguläre Ausdrücke

Reguläre Ausdrücke sind die erweiterten in Egrep . Sie setzen sich wie folgt aus Zeichen zusammen:

c

entspricht dem Nicht-Metazeichen c .

c

entspricht dem wörtlichen Zeichen c .

.

passt zu jedem Zeichen einschließlich Neue Zeile.

^

stimmt mit dem Anfang einer Zeichenfolge überein.

$

entspricht dem Ende einer Zeichenfolge.

ABC…

Zeichenliste, entspricht einem beliebigen Zeichen ABC… .

^ ABC…

Negierte Zeichenliste, entspricht jedem Zeichen außer ABC… .

r1 | r2

alternation: passt entweder r1 oder r2 .

r1r2

Verkettung: Übereinstimmungen r1 , und dann r2 .

r +

entspricht einem oder mehreren r 's.

r *

entspricht null oder mehr r 's.

r ?

entspricht null oder eins r 's.

( r )

Gruppierung: Übereinstimmungen r .

r { n }

r { n ,}

r { n , m } Eine oder zwei Zahlen in Klammern bedeuten eine Intervallausdruck . Wenn eine Zahl in den geschweiften Klammern steht, ist der vorhergehende reguläre Ausdruck r wird wiederholt n mal. Wenn zwei Zahlen durch ein Komma getrennt sind, r wird wiederholt n zu m mal. Wenn es eine Zahl gefolgt von einem Komma gibt, dann r wird mindestens wiederholt n mal.

Intervallausdrücke sind nur verfügbar, wenn entweder --posix oder --re-Intervall wird in der Befehlszeile angegeben.

y

stimmt mit der leeren Zeichenfolge am Anfang oder Ende eines Wortes überein.

B

entspricht der leeren Zeichenfolge in einem Wort.

<

stimmt mit der leeren Zeichenfolge am Anfang eines Wortes überein.

>

stimmt mit der leeren Zeichenfolge am Ende eines Wortes überein.

w

entspricht einem beliebigen Wortbestandteil (Buchstaben, Ziffern oder Unterstrich).

W

Stimmt mit jedem Zeichen überein, das kein Wortbestandteil ist.

`

stimmt mit der leeren Zeichenfolge am Anfang eines Puffers (Zeichenfolge) überein.

'

stimmt mit der leeren Zeichenfolge am Ende eines Puffers überein.

Die in String-Konstanten (siehe unten) gültigen Escape-Sequenzen sind auch in regulären Ausdrücken gültig.

Charakterklassen sind eine neue Funktion, die im POSIX-Standard eingeführt wurde. Eine Zeichenklasse ist eine spezielle Schreibweise, um Listen von Zeichen zu beschreiben, die ein bestimmtes Attribut haben, wobei die tatsächlichen Zeichen selbst jedoch von Land zu Land und / oder von Zeichensatz zu Zeichensatz variieren können. Zum Beispiel unterscheidet sich der Begriff "alphabetisch" in den USA und in Frankreich.

Eine Zeichenklasse ist nur in einem regulären Ausdruck gültig Innerhalb die Klammern einer Zeichenliste. Zeichenklassen bestehen aus :ein Schlüsselwort für die Klasse und :. Die vom POSIX-Standard definierten Zeichenklassen sind:

: alnum:

Alphanumerische Zeichen.

:Alpha:

Alphabetische Zeichen.

:leer:

Leerzeichen oder Tabulatorzeichen.

: cntrl:

Steuerzeichen

:Ziffer:

Numerische Zeichen

:Graph:

Zeichen, die sowohl druckbar als auch sichtbar sind. (Ein Leerzeichen ist druckbar, aber nicht sichtbar, während ein Leerzeichen angezeigt wird ein ist beides.)

:niedriger:

Kleinbuchstaben.

:drucken:

Druckbare Zeichen (Zeichen, die keine Steuerzeichen sind.)

: punct:

Satzzeichen (Zeichen, die keine Buchstaben, Ziffern, Steuerzeichen oder Leerzeichen sind).

:Platz:

Leerzeichen (z. B. Leerzeichen, Tabulator und Formfeed, um nur einige zu nennen).

:Oberer, höher:

Großbuchstaben

: xdigit:

Zeichen, die hexadezimal sind.

Vor dem POSIX-Standard müssten Sie zum Beispiel alphanumerische Zeichen schreiben / A-Za-z0-9 /. Wenn Ihr Zeichensatz andere alphabetische Zeichen enthält, würde dies nicht mit ihnen übereinstimmen. Wenn Ihr Zeichensatz anders als ASCII sortiert ist, entspricht dies möglicherweise nicht einmal den alphanumerischen ASCII-Zeichen. Mit den POSIX-Zeichenklassen können Sie schreiben/ : alnum: /und dies entspricht den alphabetischen und numerischen Zeichen in Ihrem Zeichensatz.

In Zeichenlisten können zwei weitere spezielle Sequenzen erscheinen. Diese gelten für Nicht-ASCII-Zeichensätze, die einzelne Symbole enthalten können Elemente zusammenstellen ), die mit mehr als einem Zeichen dargestellt werden, sowie mehrere Zeichen, die für gleichwertig sind zusammenstellen oder Sortierzwecke. (Z. B. auf Französisch sind ein einfaches "e" und ein ernsthaft akzentiertes e "gleichwertig.)

Symbole sortieren

Ein Kollatierungssymbol ist ein aus mehreren Zeichen bestehendes Kollatierungselement . und .. Zum Beispiel wenn CH ist also ein Vergleichselement .CH. ist ein regulärer Ausdruck, der mit diesem Sortierelement übereinstimmt, während CH ist ein regulärer Ausdruck, der entweder übereinstimmt c oder h.

Äquivalenzklassen

Eine Äquivalenzklasse ist ein ländereinstellungsspezifischer Name für eine Liste von gleichwertigen Zeichen. Der Name ist in eingeschlossen = und =. Zum Beispiel der Name e kann verwendet werden, um alle von `` e, ', `e', '' und` `e 'darzustellen. In diesem Fall = e = ist ein regulärer Ausdruck, der zu einem beliebigen passt e, e ', oder e`.

Diese Funktionen sind in nicht englischsprachigen Gebieten sehr wertvoll. Die Bibliothek funktioniert das gaffen verwendet für den Abgleich mit regulären Ausdrücken derzeit nur POSIX-Zeichenklassen; Sie erkennen keine Sortierzeichen oder Äquivalenzklassen.

Das y, B, <, >, w, W, `, und ' Betreiber sind spezifisch für gaffen ; Sie sind Erweiterungen, die auf Funktionen in den GNU-Bibliotheken für reguläre Ausdrücke basieren.

Die verschiedenen Befehlszeilenoptionen steuern, wie gaffen interpretiert Zeichen in regulären Ausdrücken.

Keine Optionen

Im Standardfall gaffen Stellen Sie alle Funktionen der regulären POSIX-Ausdrücke und der oben beschriebenen theGNU-Operatoren für reguläre Ausdrücke bereit. Intervallausdrücke werden jedoch nicht unterstützt.

--posix

Es werden nur reguläre POSIX-Ausdrücke unterstützt, die GNU-Operatoren sind nicht speziell. (Z.B., w entspricht einem wörtliche w). Intervallausdrücke sind zulässig.

--traditionell

Traditionelles Unix awk reguläre Ausdrücke werden abgeglichen. Die GNU-Operatoren sind nicht speziell, Intervallausdrücke sind nicht verfügbar und auch die POSIX-Zeichenklassen (: alnum: und so weiter). Zeichen, die durch oktale und hexadezimale Escape-Sequenzen beschrieben werden, werden wörtlich behandelt, auch wenn sie Metazeichen eines regulären Ausdrucks darstellen.

--re-Intervall

Erlaube Intervallausdrücke in regulären Ausdrücken, auch wenn --traditionell wurde zur Verfügung gestellt.

Aktionen

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

Betreiber

Die Operatoren in AWK sind in der Reihenfolge abnehmender Priorität

()

Gruppierung

$

Feldreferenz.

++ --

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

^

Potenzierung (** kann auch verwendet werden und **= für den Zuweisungsoperator).

+ - !

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

* / %

Multiplikation, Division und Modul.

+ -

Addition und Subtraktion.

Platz

String-Verkettung.

< >

<= >=

!= == Die regulären relationalen Operatoren.

~ !~

Übereinstimmung mit regulären Ausdrücken, negierte Übereinstimmung. HINWEIS: Verwenden Sie keinen konstanten regulären Ausdruck (/ foo /) auf der linken Seite von a ~ oder !~. Verwenden Sie nur einen auf der rechten Seite. Der Ausdruck / foo / ~ exp hat die gleiche Bedeutung wie (($ 0 ~ / foo /) ~ exp ). Das ist normalerweise so nicht was war beabsichtigt

im

Array-Mitgliedschaft

&&

Logisches UND.

||

Logisches ODER.

?:

Der bedingte Ausdruck von C. Das hat die Form Ausdruck1 ? Ausdruck2 : expr3 . Ob Ausdruck1 ist wahr, der Wert des Ausdrucks ist Ausdruck2 sonst ist es expr3 . Nur einer von Ausdruck2 und expr3 ausgewertet wird.

= += -=

*= /= %= ^= Zuordnung. Beide absolute Zuordnung ( var = Wert ) und die Bedienerzuweisung (die anderen Formulare) werden unterstützt.

Steueranweisungen

Die Steueranweisungen lauten wie folgt:

ob ( Bedingung ) Aussage sonst Aussage während ( Bedingung ) Aussage tun Aussage während ( Bedingung ) zum ( Ausdruck1 ; Ausdruck2 ; expr3 ) Aussage zum ( var im Array ) Aussage brechen fortsetzen löschen Array Index löschen Array Ausfahrt Ausdruck { Aussagen }

E / A-Anweisungen

Die Ein- / Ausgabeanweisungen lauten wie folgt:

schließen( Datei , Wie )

Datei, Pipe oder Co-Prozess schließen. Die Wahl Wie sollte nur verwendet werden, wenn ein Ende eines Zweiwege-Rohrs an einem Co-Prozess geschlossen wird. Es muss auch ein String-Wert sein "zu" oder "von".

Getline

einstellen $0 vom nächsten Eingabesatz; einstellen NF, NR, FNR.

Getline < Datei

einstellen $0 von der nächsten Aufnahme von Datei ; einstellen NF.

Getline var

einstellen var vom nächsten Eingabesatz; einstellen NR, FNR.

Getline var < Datei

einstellen var von der nächsten Aufnahme von Datei .

Befehl | Getline var

Lauf Befehl Pipe den Ausgang entweder in $0 oder var , wie oben.

Befehl & getline var

Lauf Befehl als Co-Process-Piping die Ausgabe entweder in $0 oder var , wie oben. Co-Prozesse sind a gaffen Erweiterung.

Nächster

Stoppen Sie die Verarbeitung des aktuellen Eingabesatzes. Der nächste Eingabesatz wird gelesen und die Verarbeitung beginnt mit dem ersten Muster im AWK-Programm. Wenn das Ende der Eingangsdaten erreicht ist, wird die ENDE Blöcke, falls vorhanden, werden ausgeführt.

nextfile

Stoppen Sie die Verarbeitung der aktuellen Eingabedatei. Der nächste gelesene Eingabedatensatz stammt aus der nächsten Eingabedatei. DATEINAME und ARGIND aktualisiert werden, FNR wird auf 1 zurückgesetzt, und die Verarbeitung beginnt mit dem ersten Muster im AWK-Programm. Wenn das Ende der Eingangsdaten erreicht ist, wird die ENDE Blöcke, falls vorhanden, werden ausgeführt.

drucken

Druckt den aktuellen Datensatz. Der Ausgabesatz wird mit dem Wert von beendet ORS Variable.

drucken Ausdrucksliste

Druckt Ausdrücke. Jeder Ausdruck wird durch den Wert von getrennt OFS Variable. Der Ausgabesatz wird mit dem Wert von beendet ORS Variable.

drucken Ausdrucksliste > Datei

Druckt Ausdrucke auf Datei . Jeder Ausdruck wird durch den Wert von getrennt OFS Variable. Der Ausgabesatz wird mit dem Wert von beendet ORS Variable.

printf fmt, expr-list

Formatieren und drucken.

printf fmt, expr-list > Datei

Formatieren und ausdrucken Datei .

System( cmd-line )

Führen Sie den Befehl aus cmd-line , und geben Sie den Beendigungsstatus zurück. (Dies ist möglicherweise nicht auf Nicht-POSIX-Systemen verfügbar.)

fflush ( Datei )

Löschen Sie alle Puffer, die der geöffneten Ausgabedatei oder -pipe zugeordnet sind Datei . Ob Datei fehlt, dann wird die Standardausgabe geleert. Ob Datei ist die Nullzeichenfolge, dann werden die Puffer aller offenen Ausgabedateien und Pipes geleert.

Zusätzliche Ausgabeumleitungen sind zulässig drucken und printf.

drucken … >> Datei

Hängt die Ausgabe an Datei .

drucken … | Befehl

schreibt auf eine Pfeife.

drucken … | & Befehl

sendet Daten an einen Co-Prozess.

Das Getline Befehl gibt 0 am Ende der Datei und -1 bei einem Fehler zurück. Bei einem Fehler ERRNO enthält eine Zeichenfolge, die das Problem beschreibt.

HINWEIS: Bei Verwendung einer Pipe oder eines Co-Prozesses Getlineoder von drucken oder printf innerhalb einer Schleife, Sie Muss benutzen schließen() um neue Instanzen des Befehls zu erstellen. AWK schließt nicht automatisch Pipes oder Co-Prozesse, wenn sie EOF zurücksenden.

Die printf-Anweisung

Die AWK-Versionen des printf Aussage und sprintf () Die Funktion (siehe unten) akzeptiert die folgenden Konvertierungsspezifikationsformate:

% c

Ein ASCII-Zeichen. Wenn das Argument für verwendet wird % c ist numerisch, wird als Zeichen behandelt und gedruckt. Andernfalls wird angenommen, dass das Argument eine Zeichenfolge ist, und das einzige erste Zeichen dieser Zeichenfolge wird gedruckt.

% d, %ich

Eine Dezimalzahl (der ganzzahlige Teil).

% e,% E

Eine Gleitkommazahl des Formulars - d.dddddde + - dd. Das % E Format verwendet E anstatt e.

% f

Eine Gleitkommazahl des Formulars - ddd.dddddd.

% g,% G

Benutzen % e oder % f Konvertierung, je nachdem, was kürzer ist, wobei nicht signifikante Nullen unterdrückt werden. Das%G Format verwendet % E anstatt % e.

%O

Eine vorzeichenlose Oktalzahl (auch eine ganze Zahl).

% u Eine vorzeichenlose Dezimalzahl (wiederum eine ganze Zahl).

% s

Eine Zeichenfolge

% x,% X

Eine vorzeichenlose Hexadezimalzahl (eine Ganzzahl). Das % X Format verwendet ABCDEF anstattabcdef.

%%

Ein einzelnes % Charakter; Kein Argument wird konvertiert.

Optionale zusätzliche Parameter können zwischen liegen % und der Kontrollbrief:

Anzahl $

Verwenden Sie die Anzahl 'th Argument an dieser Stelle in der Formatierung. Dies nennt man a Positionsbezeichner und ist hauptsächlich für die Verwendung in übersetzten Versionen von Formatzeichenfolgen vorgesehen, nicht im Originaltext eines AWK-Programms. Es ist ein gaffen Erweiterung.

-

Der Ausdruck sollte in seinem Feld linksbündig sein.

Platz

Bei numerischen Konvertierungen voranstellen Sie positive Werte mit einem Leerzeichen und negative Werte mit einem Minuszeichen.

+

Das Pluszeichen vor dem Breitenmodifizierer (siehe unten) gibt an, immer ein Zeichen für numerische Konvertierungen anzugeben, auch wenn die zu formatierenden Daten positiv sind. Das + überschreibt den Raummodifizierer.

#

Verwenden Sie ein `` alternatives Formular '' für bestimmte Kontrollbuchstaben. Zum %O, liefern Sie eine führende Null. Zum % x, und % X, liefern eine führende 0x oder 0X für ein Ergebnis ungleich Null. Zum % e, % E, und % fDas Ergebnis enthält immer einen Dezimalpunkt. Zum %G, und %G, nachfolgende Nullen werden nicht aus dem Ergebnis entfernt.

0

Ein führendes 0 (null) fungiert als Flag, das angibt, dass die Ausgabe mit Nullen anstelle von Leerzeichen aufgefüllt werden soll. Dies gilt auch für nicht numerische Ausgabeformate. Dieses Flag hat nur eine Wirkung, wenn die Feldbreite größer als der zu druckende Wert ist.

Breite

Das Feld sollte auf diese Breite aufgefüllt werden. Das Feld wird normalerweise mit Leerzeichen aufgefüllt. Wenn die 0Flag wurde verwendet, es wird mit Nullen aufgefüllt.

. vor

Eine Zahl, die die beim Drucken zu verwendende Genauigkeit angibt. Für die % e, % E, und % fIn diesem Format wird die Anzahl der Stellen angegeben, die rechts vom Dezimalzeichen gedruckt werden sollen. Für die %G, und %G formatiert, gibt es die maximale Anzahl von signifikanten Stellen an. Für die % d, %O, %ich, % u, % x, und % X formatiert, gibt es die Mindestanzahl der zu druckenden Ziffern an. Zum % sgibt an, wie viele Zeichen maximal aus der Zeichenfolge gedruckt werden sollen.

Die Dynamik Breite und vor Fähigkeiten des ANSI C printf () Routinen werden unterstützt. EIN * anstelle von einem der Breite oder vor Spezifikationen bewirken, dass ihre Werte aus der Argumentliste nach übernommen werden printf oder sprintf (). Um einen Positionsspezifizierer mit dynamischer Breite oder Genauigkeit zu verwenden, geben Sie das an Anzahl $ nach dem * in der Formatzeichenfolge. Zum Beispiel, "% 3 $ * 2 $. * 1 $ s".

Spezielle Dateinamen

Bei der E / A-Umleitung von beiden drucken oder printf in eine Datei oder über Getline aus einer Datei, gaffen erkennt bestimmte spezielle Dateinamen intern. Diese Dateinamen ermöglichen den Zugriff auf geöffnete Dateideskriptoren, die von übernommen wurden gaffen Der übergeordnete Prozess (normalerweise die Shell). Diese Dateinamen können auch in der Befehlszeile zum Benennen von Datendateien verwendet werden. Die Dateinamen sind:

/ dev / stdin

Die Standardeingabe.

/ dev / stdout

Die Standardausgabe.

/ dev / stderr

Die Standardfehlerausgabe.

/ dev / fd / n

Die dem geöffneten Dateideskriptor zugeordnete Datei n .

Dies ist besonders nützlich für Fehlermeldungen. Zum Beispiel:

print "Du hast es verpasst!" > "/ dev / stderr"

während Sie sonst verwenden müssten

print "Du hast es verpasst!" | "cat 1> & 2"

Die folgenden speziellen Dateinamen können mit der verwendet werden |& Co-Prozess-Operator zum Erstellen von TCP / IP-Netzwerkverbindungen.

/ inet / tcp / lport / Rhost / rport

Datei für TCP / IP-Verbindung am lokalen Port lport zum entfernten Host Rhost auf Remote-Port rport . Verwenden Sie einen Port von 0 Damit das System einen Port auswählen kann.

/ inet / udp / lport / Rhost / rport

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

/ inet / raw / lport / Rhost / rport

Reserviert für zukünftige Verwendung.

Andere spezielle Dateinamen bieten Zugriff auf Informationen über den Lauf gaffen verarbeiten. Diese Dateinamen sind nun veraltet. Verwenden Sie die