Kapitel 3 Ein- und Ausgabeformate3.1 Formatierte AusgabeBisher kennen wir nur die Ausgabe mit print. Dies ist die einfachste Form, in der alle Argumente, die durch Kommas getrennt werden, nacheinander durch Leerzeichen getrennt ausgegeben werden. Eine typische Ausgabe für das Beispiel oben, print x, n, x/n, wäre: 1524 108 14.1111 Jeder print-Befehl schreibt eine neue Zeile. Gerade für Datensätze, die meist einem strengen Format unterliegen, möchte man aber eine bessere Formatierung der Ausgabe. Dazu gibt es den printf-Befehl (print formatted): printf "[format]", [argumente] Es kann eine beliebige Anzahl von Argumenten übergeben werden. Für jedes übergebene Argument muss im [format]-String ein Ausgabeformat, das mit dem Prozentzeichen % beginnt, angegeben werden. Die wichtigsten Formate sind:
%s String Buchstaben in Zahlen bei %e, %g und %x werden klein ausgegeben. Für Großbuchstaben gibt es die Notationen %E, %G und %X. Zwischen dem Prozentzeichen und dem Ausgabetyp können Angaben zur Breite des Ausgabefeldes gemacht werden. %8d passt eine ganze Zahl rechtsbündig in ein Feld von 8 Zeichen ein. Geht der Breite ein Minus voran, so erfolgt die Ausgabe ins Feld linksbündig: %-8d. Wird ein Plus vorangestellt, so wird auf jeden Fall ein Vorzeichen ausgegeben, auch wenn die Zahl positiv ist. Für Fließkommazahlen kann nach einem Dezimalpunkt die Anzahl der signifikanten Nachkommastellen angegeben werden: %16.4f schreibt die Zahl mit vier Nachkommastellen in ein Feld von 16 Zeichen Breite. Beginnt die Breitenangabe mit einer Null, so werden die unbenutzten Felder links nicht mit Leerzeichen, sondern mit Nullen aufgefüllt: printf "Uhrzeit: %02d:%02d", hrs, min; Alles im Formatstring, was nicht zu einer Formatangabe mit % gehört, wird wortwörtlich ausgegeben. Nach printf beginnt nicht automatisch eine neue Zeile wie bei print. Eine neue Zeile wird mit dem Sonderzeichen \n eingeleitet: printf "ersteZeile\nzweiteZeile\ndritteZeile\n" Es gibt mehrere solche Sonderzeichen, die mit einem Backslash beginnen:
\n Zeilenumbruch (newline) Strings können in awk beliebig lang sein. Sie hören mit dem Zeichen \0, das dem ASCII-Code 0 entspricht, auf (nullterminierte Strings). 3.2 Formatgebundens Einlesen mit SubstringsSubstrings sind Teile von Strings. In awk bezeichnet substr ([string], [anfang], [länge]) den Substring von [String] ab der Stelle [anfang] der Länge [länge]. Das erste Zeichen des Strings hat dabei die Position 1. substr ("Schande",3,4) ist also »hand«. Wenn [länge] weggelassen wird, geht der Substring bis zum Ende des Strings. Betachten wir also eine Eingabekarte nach dem typischen Achter-Format, etwa eine Karte mit Knotenkoordinaten: $......|....id.|.....x.|.....y.|.....z.| NODE 12 12.0000 33.6773-992.762 Um nun den Durchschnitt aller Knotenkoordinaten zu bilden, lautet das Skript: substr($0,1,4)=="NODE" { x += substr($0,17,8); y += substr($0,25,8); z += substr($0,33,8); n++; } END { printf "NODE AVERAGE %8.2f%8.2f%8.2f", x/n ,y/n ,z/n; } Da dieses Skript schon sehr lang ist, schreibt man es besser in eine eigene Datei. Dann kann man die Anweisungen zeilenweise angeben, das sieht übersichtlicher aus. 3.3 Weitere StringoperationenEs gibt noch weitere nützliche Stringoperationen, die hier kurz vorgestellt werden:
Aufgaben: Aufgabe 3a Aufgabe 3b Aufgabe 3c
|
|