|
Ein- und Ausgabe-Anweisungen
Die beiden Funktionen print und printf wurden schon
am Anfang behandelt. Für die Eingabe gibt es noch die Funktion getline. Die folgende Tabelle faßt die Ein- und Ausgabemöglichkeiten zusammen:
Anweisung | Bedeutung |
---|
close(Datei) | Datei (oder Pipe) schließen. | getline | nächste Zeile in $0 laden. | getline <Datei | Nächste Zeile aus bestimmter Datei lesen. | getline Variable | Nächste Zeile in Variable, statt $0, laden. |
getline Variable <Datei | Zeile aus Datei in Variable laden. |
next | Nächste Zeile lesen und ab Anfang des Skriptes bearbeiten. |
nextfile | Aktuelle Datei schließen und mit nächster fortfahren. |
print | Gibt den aktuellen Satz aus. |
print Ausdrucksliste | Gibt Ergebnis der Ausdrücke aus. Auch: print (...). |
print Ausdrucksliste > Datei | Schreibt Ergebnis der Ausdrücke in Datei. |
print Ausdrucksliste | Programm | Schreibt Ergebnis der Ausdrücke in eine Pipe. |
printf Format, Ausdrucksliste | Gibt Ergebnisse formatiert aus. Auch: printf (...). |
printf Format, Ausdrucksliste > Datei | formatierte Ausgabe in Datei. |
printf Ausdrucksliste | Programm | Schreibt Ergebnis der Ausdrücke in eine Pipe. |
fflush([Datei]) | Erzwingt das Schreiben der Puffer |
Bei der Ausgabe werden die Variablen $0, OFS und ORS berücksichtigt.
Zur Ausgabe in Dateien werden die Zeichen der Ein- und Ausgabeumleitung
von UNIX verwendet. Dateinamen müssen in Anführungszeichen (" ")
eingeschlossen werden!
Beispiel: (Entsprechend des Wertes der Zahl in der ersten Spalte der Datei
soll die Datei in zwei Dateien zerlegt werden.
awk '$1 > 100 { print > "klein"};
$1 <= 100 {print > "gross"}'
Die Ausgabe einer print- bzw. printf-Anweisung kann sogar in eine
Pipe geschrieben werden. Das folgende Programm sortiert alle Zeilen einer Datei die den
String "test" enthalten:
awk '/test/ { print | "sort" }'
Dateien, die Sie öffnen, sollten Sie auch wieder schließen. Zum
einen dürfen Sie meistens nur eine endliche Zahl von Dateien
gleichzeitig geöffnet haben, zum anderen kann es Probleme geben, wenn
die Dateien auch von anderen Prozessen verwendet werden sollen (Logfiles,
Infodateien etc.). Auch Pipes sollten wieder geschlossen werden!
Sie erreichen dies mit:
close(dateiname)
close(kommando)
Hierbei muß der komplette Name mit Pfad - wie beim Öffnen - wieder
angegeben werden.
Das Format für printf stimmt im wesentlichen mit dem für die entsprechende
C-Funktion überein. Die printf-Kontrollzeichen (werden immer mit einem
Prozentzeichen eingeleitet):
Zeichen | drucke den entsprechenden Ausdruck als |
c | ASCII-Zeichen |
d | Integerwert (dezimal) |
e | [-]d.ddddddE[+-}dd |
f | [-]ddd.dddddd |
g | e oder f Format (wählt das kürzere) |
o | Oktalwert (ohne Vorzeichen) |
s | Zeichenkette |
x | Hexadezimalwert (ohne Vorzeichen) |
% | Verwendet kein Argument! gibt ein % aus! |
Eingabe mit getline
Mit dieser Funktion kann explizit der nächste Eingabe-Rekord gelesen
werden. Das Programm fährt dabei mit der Abarbeitung
fort und wird nicht neu gestartet. getline kann drei Rückgabewerte
annehmen: 1, wenn der Rekord gelesen werden konnte; 0, wenn das Dateiende
erreicht ist und -1, wenn beim Lesen ein Fehler auftrat.
getline kann auf folgende Weisen eingesetzt werden:
Ausdruck | setzt folgende Variablen |
getline | $0, NF, NR, FNR |
getline variable | variable, NR, FNR |
getline <dateiname | $0, NF |
getline variable <dateiname | variable |
kommando | getline | $0, NF |
kommando | getline variable | variable |
|
|
|