8.8 Ausgabe in Dateien
Ausgaben können in Dateien umgeleitet werden. Wird der Dateiname direkt angegeben, so muß er in Quotes eingeschlossen werden.
{ print $1, $2 > "out_file" }
Der Dateiname kann in einer Variablen abgelegt werden.
BEGIN { file = "out_file" }
{ print $1, $2 > file }
Wird der Dateiname durch einen Expression gebildet z.B. Concatenation, dann muß der Expression in runde Klammern gesetzt werden.
awk -F: ext=".dat" '
{ print $1, $2 > ("out_file" ext) }
' /etc/passwd
I.d.R. ist die Anzahl der gleichzeitig offenen Dateien und Pipes begrenzt, Deshalb können Dateien und Pipes aus dem Programm geschlossen werden.
Dateien werden geschlossen, indem der Name in einem close angeführt wird
close ("out_file") oder close (file)
BEGIN { file = "out_file" }
{ print $1, $2 > file
cnt++
if (cnt == 20) close (file)
}
8.8.1 Ausgabe in Pipes
Aus dem awk können Ein-/Ausgaben mit Pipes vorgenommen werden.
print | "command-line"
Innerhalb der "command-line" können auch Optionen verwendet werden.
awk -F: ' { cnt++
printf "%3d: %s\n",cnt, $1 | "sort -t: +1r "
}
' /etc/passwd
8.8.3 I/O Statements Zusammenfassung
Folgende input/output Statements stehen zur Verfügung:
close(filename) Schließt Datei oder Pipe.
getline Setzt $0 vom nächsten Input-Record
Setzt die internen Variablen NF, NR, FNR.
getline < "file" Setze $0 vom nächsten Satz von file. Setzt NF.
file muß in "file" Quotes gesetzt werden, da es sonst als
awk-Variable interpretiert wird
getline var Setzt var vom nächsten Input-Record. Setzt NF, FNR.
getline var < "file" Setzt var vom nächsten Satz von file.
file muß in "file" Quotes gesetzt werden, da es sonst als
awk-Variable interpretiert wird
next Die Bearbeitung des augenblicklichen Satzes wird beendet.
Der nächste Satz wird gelesen und awk beginnt die Auswertung
wieder beim ersten Pattern.
Wenn EOF erkannt wird, so wird der END Block(s) bearbeitet.
next "file" Die Bearbeitung der augenblicklichen Datei wird beendet.
Der nächste Satz wird von der nächsten Eingabedatei gelesen
(falls vorhanden). FILENAME wird neu gesetzt,
FNR wird zurückgesetzt auf 1.
awk beginnt die Auswertung wieder mit dem ersten Pattern.
Wenn EOF erkannt wird, so wird der END Block(s) bearbeitet.
print Gibt den augenblicklichen Satz aus.
print expr-list Print expression.
- Werden die Parameter durch Leerzeichen getrennt, so werden sie bei der Ausgabe verbunden.
ls -l | awk '{print $1 $3 $9}'
- Werden die Parameter durch Komma getrennt, so wird der
expression durch den Inhalt von OFS bei der Ausgabe vom
nächsten expression getrennt.
ls -l | awk '{print $1, $3, $9}'
- Der Satz wird mit dem mit dem Inhalt der Variablen ORS abgeschlossen.
print expr-list > "file" Prints expressions on file.
Jeder expression wird durch den Inhalt von OFS vom nächsten
expression getrennt. Der Satz wird mit dem mit dem Inhalt der
Variablen ORS abgeschlossen. Wird mehrfach auf dieselbe
Datei umgeleitet oder die Anweisung mehrfach durchlaufen, so
wird in der Folge an die Datei angehängt.
printf fmt, expr-list Formatierte Ausgabe, (siehe Formatierte Ausgabe)
Form verändert
getline $0, NF, NR, FNR
getline var var, NR, FNR
getline < file $0, NF
getline var < file var
cmd | getline $0, NF
cmd | getline var var