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 width 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.
Die Anzahl der Nachkommastellen wird mit .prec angegeben
%[-]width[.prec]
- linksbündige Ausrichtung des expr im Ausgabefeld
width Feldlängenangabe
.prec Genauigkeit nach dem Dezimaltrennzeichen
%6.2f 6 Stellen für die gesamte Auasgabe davon 2 Nachchkommastellen,
ein . (Punkt) als Dezimaltrennzeichen,
es verbleiben somit nur 3 Stellen für den ganzzahligen Teil
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
} '