awk ed
Ein Textverarbeitungsprogramm ähnlich sed.
Generell ed
Programmaufruf ed
awk 'befehle' zu_bearbeitende_dateien
oder
awk -f befehls_datei zu_bearbeitende_dateien
oder
befehl | awk 'befehle'
Arbeitsweise ed
Awk-Scripte haben die Form:
awk 'muster1 {befehl1} muster2 {befehl2} ...' dateienHierbei werden Eingabe-Dateien zeilenweise mit den Mustern verglichen und bei Erfolg der nachfolgende Befehl ausgeführt.
- Muster
- /muster/: muster als regulärer Ausdruck
- wird kein Muster angegeben, wird der Befehl für jede Zeile ausgeführt
- bei BEGIN wird der Befehl vor der ersten Zeile ausgeführt
- bei END wird nach der letzten Zeile ausgeführt
- Bedingungen in C-Syntax
- logische Verknüpung: (muster1 && !(muster2 || muster3))
Jede Zeile der Eingabe-Datei wird in Worte/Spalten unterteilt. Die einzelnen Worte der Zeile sind über Variablen \(1, \)2,... ansprechbar, die gesamte Zeile als \(0\lt /tt\gt . Die Trennung zwischen Worten/Spalten geschieht durch Leerzeichen oder Tab. == Befehle == Es können mehrere Befehle nacheinander ausgeführt werden: {befehl1; befehl2; ...} Kommentare beginnen mit Raute # Kommentar === Ausgabe === \lt tt\gt print\lt /tt\gt gibt Strings und Variablen aus (stdout). Werden mehrere Ausgaben durch Komma getrennt angegeben, werden sie bei der Ausgabe durch Leerzeichen getrennt. Ohne Komma werden sie direkt aneinandergehängt. print `hallo` `michi` -\gt `hallomichi` print `hallo`, `michi` -\gt `hallo michi` print \)1 -> erstes Wort der Zeile
Formatierte Ausgabe wie in C mit printf:
printf "%.2d - %s", $1, $2
Umleitung der Ausgabe:
print... > "Dateiname" print... >> "Dateiname" print... | "Befehl"
Bedingungen ed
wie in C
if (i < 4) befehl
mehrere Befehle:
if (i < 4) {befehl1; befehl2}Schleifen ed
- while
while (i < 6) befehl
- for (wie in C)
for (i = 0; i < 4; i ++) befehl
- for (2)
for (_index_ in _array_) befehl
(Schleife über Array-Indizes, nicht den Inhalt!)
- besondere Befehle
- continue: zur nächsten Iteration springen
- break: Schleife abbrechen
sonstige ed
- exit: Verarbeitung beenden (trotzdem END-Abschnitt ausführen)
- next: zur nächsten Eingabe-Zeile springen
Variablen ed
grundsätzlich ed
Variablen werden ohne Typ und ohne Deklaration verwendet. Sie sind Strings, können aber auch als Ganz- oder Fließkommazahlen verwendet werden.
{i = i + 1} END {print i}Der Anfangswert ist immer ein leerer String (= 0 als Zahlen).
- Arrays
a[4] = "test" a["ui"] = "ij" "assoziativer" Array
spezielle Variabel ed
- \(0\lt /tt\gt : die gesamte Zeile * \lt tt\gt \)1, $2,...: das 2.,3.,... Wort der Zeile
- NF: Anzahl der Worte in der aktuellen Zeile
- NR: Zeilennummer der Eingabe
- FS: Trennzeichen bei der Wort-Erkennung
- OFS: Trennzeichen bei der Ausgabe mehrerer Werte durch (Komma-Trennung in print)
- ORS: Trennzeichen zwischen Ausgabe-Zeilen
- FILENAME: Dateiname der aktuellen Eingabedatei
- ARGC: Anzahl der Befehlszeilenparameter
- ARGV: Befehlszeilenparameter (Vektor)