Wissen, wo es lang geht

8.6 Formatierte Ausgabe

awk kann Daten formatiert ausgeben. Hierzu wird die Anweisung printf verwendet.

printf  "format"  expr-list...

·	Das Format kann als String oder als Variable übergeben werden.

·	Für jeden auszugebenden Wert der expr-list   muß eine Formatspezifikation im Format enthalten sein.

·	Die Formatspezifikation legt die Konvertierung und die Feldlänge fest.
·	Spezifikation	Konvertierung
	%c 	Character, Einzelzeichen
     	%d	Integer
	%e	Gleitkomma, Eponentialschreibweise                 [-]d.ddddddE[+-dd]
	%f	Gleitkomma, Ausgabe mit 6 Nachkommastellen [-]ddd.dddddd
				abhängig von CONVFMT)
	%g	Gleitkomma, kürzere Darstellung (e oder g)
	%s	Stringausgabe
	%o	Oktale Ausgabe
	%x	Hexadezimale Ausgabe

·	Die Feldlänge und die Ausrichtung wird mit der Formatspezifikation angegeben
Die angegebene Feldlänge ist eine Mindestgröße. Reicht der Platz bei
numerischer Ausgabe nicht aus, so nimmt der awk die erforderlichen Stellen.
 -   	linksbündige Ausrichtung des expr im Ausgabefeld
 width	Feldlängenangabe
.prec	Genauigkeit nach dem Dezimaltrennzeichen

Format expr Ausgabe printf "|%d|\n",99/2 |49| printf "|%6d|\n",99/2 | 49| printf "|%06d|\n", 99/2 |000049| printf "|%-6d|\n", 99/2 |49 | printf "|%f|\n", 99/2 |49.500000| printf "|%6.2f|\n", 99/2 | 49.50| printf "|%-6.2f|\n", 99/2 |49.50 | printf "|%06.2f|\n", 99/2 |049.50| printf "|%e|\n", 99/2 |4.950000e+01| printf "|%14.5e|\n", 99/2 | 4.95000e+01| printf "|%-14.5e|\n", 99/2 |4.95000e+01 | printf "|%014.5e|\n", 99/2 |0004.95000e+01| printf "|%g|\n", 99/2 |49.5| printf "|%12g|\n", 99/2 | 49.5| printf "|%12.7g|\n", 99/2 | 49.5| printf "|%-2.7g|\n", 99/2 |49.5 | printf "|%x|\n", 240 |f0| printf "|%4x|\n", 240 | f0| printf "|%4X|\n", 240 | F0| printf "|%s|\n", "D.Hahn" |D. Hahn| printf "|%10s|\n", "D.Hahn" | D. Hahn| printf "|%-10s|\n", "D.Hahn" |D. Hahn | printf "|%10.3s|\n", "D.Hahn" | D. |


8.6.1 Plattenbelegung Aufgabenstellung

Ein Script soll allen Plattenplatz ermitteln den ein User belegt. · Der Username sollte als Parameter übergeben oder vom Script ermittelt werden · Die Summierung soll ab einem vorgegebenen Verzeichnis oder ab dem augenblicklichen Verzeichnis ermittelt werden.

8.6.2 Plattenbelegung Lösung


#! /bin/ksh # ----------------------------------------------------------------------------------------------- # Erzeugt : 20.03.97 # Autor : Detlef Hahn # Beschreibung : Das Script ermittelt den verbrauchten Plattenplatz für einen # Anwender # ----------------------------------------------------------------------------------------------- # Modif.Log : #_====================================================== # ----------------------------------------------------------------------------------------------- # Mainscript disk_use # ----------------------------------------------------------------------------------------------- [ $# -ge 1 ] && user=$1 || user=`logname` [ $# -eq 2 ] && dir=$2 || dir=`pwd` ls -laR $dir 2> /dev/null | awk -v user=$user -v dir=$dir ' BEGIN { print "\nPlattenverbrauch ", user," ab Verzeichnis : ",dir print "Stand : " strftime("%d.%m.%y") } /^-/ { sum_file = sum_file + $5 # Summe traditionell anz_file = anz_file + 1 # hochzählen traditionell next # Nächsten Satz lesen } # Verzeichnisse bearbeiten dabei . und .. ausblenden $1~/^d/ && $3~user && $9~/^[^\.]/ { # { muß hinter Condition sonst # wird bei jedem Satz verarbeitet sum_dir += $5 # Summe C-like bilden anz_dirs++ # hochzählen C-like } END { printf "%6d Normale Dateien %6d\n",anz_file, sum_file printf "%6d Verzeichnisse %6d\n",anz_dirs, sum_dir } '