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