Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
awk [2017/09/08 22:59] root [Relational Expression] |
awk [2017/10/19 21:33] (aktuell) root [Built-In] |
||
---|---|---|---|
Zeile 39: | Zeile 39: | ||
* diese Funktionen werden also nicht für jede Zeile ausgeführt | * diese Funktionen werden also nicht für jede Zeile ausgeführt | ||
* können beliebige Aktionen/ | * können beliebige Aktionen/ | ||
- | \\ \\ | + | \\ |
* alle anderen Funkionen werden immer ausgeführt - für jede Zeile die eingelesen wird | * alle anderen Funkionen werden immer ausgeführt - für jede Zeile die eingelesen wird | ||
* die /Pattern/ sind Bedingungen die gegeben sein müssen, damit die Action (der darauffolgende Code Block) ausgeführt wird - so wie if-Anweisungen. | * die /Pattern/ sind Bedingungen die gegeben sein müssen, damit die Action (der darauffolgende Code Block) ausgeführt wird - so wie if-Anweisungen. | ||
* Pattern sind optional, Actions ohne Pattern davor werden immer ausgeführt | * Pattern sind optional, Actions ohne Pattern davor werden immer ausgeführt | ||
+ | \\ | ||
+ | * Ein Action-Block kann aus mehreren Aktionen/ | ||
+ | * das einleitende { muss direkt (in der gleichen Zeile) wie das Pattern stehen | ||
+ | * einzelne Aktionen werden durch ";" | ||
+ | |||
====== Pattern/ | ====== Pattern/ | ||
Zeile 103: | Zeile 108: | ||
Es gibt 3 Arten von Variablen. | Es gibt 3 Arten von Variablen. | ||
- | **Fields** | + | ===== Fields |
* enthalten den Inhalt von Feldern | * enthalten den Inhalt von Feldern | ||
Zeile 110: | Zeile 115: | ||
* $0 enthält den gesamten Record/ | * $0 enthält den gesamten Record/ | ||
- | **Built-In** | + | ===== Built-In |
- | * Variablen deren Inhalt das Verhalten von awk bestimmen oder die Statusinformationen | + | * Variablen deren Inhalt das Verhalten von awk bestimmen oder die Sjantatusinformationen |
* haben normale Namen (ohne irgend etwas davor) | * haben normale Namen (ohne irgend etwas davor) | ||
Zeile 117: | Zeile 122: | ||
^Name ^Beschreibung ^ | ^Name ^Beschreibung ^ | ||
- | |FS|Field Separator - Definiert das Trennzeichen bzw. den Regular Expression zum Trennen der Fields/ | + | |FS|Field Separator - Definiert das/die Trennzeichen bzw. den Regular Expression zum Trennen der Fields/ |
- | |RS|Record Separator - Definiert das Trennzeichen bzw. den Regular Expression zum Trennen der Records/ | + | < |
- | |OFS|Output Field Seperator - Definiert das Trennzeichen | + | Eingabestring: |
+ | awk-Aufruf: awk ' | ||
+ | Ausgabe: du | ||
+ | </ | ||
+ | In obigem Beispiel ist der Field—Seperator (FS=) auf " | ||
+ | Aus dem String " | ||
+ | Der Field-Seperator kann beim Aufruf gesetzt werden über die Option -F: | ||
+ | < | ||
+ | awk -F " | ||
+ | </ | ||
+ | oder in der BEGIN-Funktion: | ||
+ | < | ||
+ | awk ' | ||
+ | </ | ||
+ | \\ \\ | ||
+ | Field-Seperator kann ein einzelnes Zeichen, eine Zeichenkette oder ein regular Expression sein (was mehrer Zeichen/ | ||
+ | \\ | ||
+ | < | ||
+ | FS=" | ||
+ | </ | ||
+ | In diesem Fall ist der Feldtrenner das Zeichen " | ||
+ | \\ \\ \\ | ||
+ | < | ||
+ | FS=" | ||
+ | </ | ||
+ | In diesem Fall ist die Zeichenkette " | ||
+ | Beispielweise würde: | ||
+ | < | ||
+ | 511);622, 633 | ||
+ | </ | ||
+ | in die Felder: " | ||
+ | Aber: | ||
+ | < | ||
+ | 511;622, 633 | ||
+ | </ | ||
+ | würden nicht zerlegt werden.\\ \\ | ||
+ | Es muss immer die gesamte Zeichenkette zu finden sein die als Feldtrenner angegeben wurde. \\ \\ \\ | ||
+ | < | ||
+ | FS=" | ||
+ | </ | ||
+ | In diesem Fall ist der Feldtrenner das Zeichen " | ||
+ | Das bedeutet: | ||
+ | |||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | \\ \\ | ||
+ | < | ||
+ | -F " | ||
+ | </ | ||
+ | In diesem Fall ist entweder " | ||
+ | \\ | ||
+ | Das bedeutet: | ||
+ | * " | ||
+ | * " | ||
+ | * " | ||
+ | |||
+ | </ | ||
+ | |RS|Record Separator - Definiert das Trennzeichen bzw. den Regular Expression zum Trennen der Records/ | ||
+ | < | ||
+ | Eingabestring: | ||
+ | Script: awk ' | ||
+ | Ausgabe: | ||
+ | Dies ist ein Satz | ||
+ | Dies ist der nächste | ||
+ | Dies der danach | ||
+ | </ | ||
+ | In obigem Beispiel enthält $0 den aktuellen Record, da " | ||
+ | < | ||
+ | Eingabestring: | ||
+ | Script: awk ' | ||
+ | Ausgabe: | ||
+ | ist | ||
+ | ist | ||
+ | der | ||
+ | </ | ||
+ | Obiges Beispiel ließt je einen Satz ein (da ein Record jeweils durch " | ||
+ | Im Prinziep trifft alles (die definierbaren regular Expressions usw.) vom Field Seperator auch auf den Recordseperator zu. | ||
+ | </ | ||
+ | |OFS|Output Field Seperator - Definiert das Trennzeichen | ||
|ORS|Output Record Seperator - Definiert wie Records bei der Ausgabe getrennt werden. \\ \\ Per Default durch New Line (\n). \\ \\ Bei der Ausgabe ist ein Record ein print-Statement und alles was dies ausgibt. Gibt es mehrere Ausgaben durch print, startet jedes print-Statement einen neue Zeile/ | |ORS|Output Record Seperator - Definiert wie Records bei der Ausgabe getrennt werden. \\ \\ Per Default durch New Line (\n). \\ \\ Bei der Ausgabe ist ein Record ein print-Statement und alles was dies ausgibt. Gibt es mehrere Ausgaben durch print, startet jedes print-Statement einen neue Zeile/ | ||
< | < |