4 Datenformatierung mit awk
In diesem Kapitel wird der Kalender nun als
HTML-Tabelle formatiert. Der formatierte
Kalender wird dabei in verschiedenen Versionen erstellt. Der Aufruf
cal -m 4 2001 | gawk -f cal_html.awk
ergibt bereits eine einfache HTML-Seite mit einem Kalender vom
April 2001. Im
folgenden wird das Programm abschnittsweise erklärt.
BEGIN {
printf("\n<HTML>");
printf("\n<HEAD>");
printf("\n<link rel=\"stylesheet\" href=\"av.css\" type=\"text/css\">");
printf("\n</HEAD>");
printf("\n<BODY>");
}
Am Beginn werden die HTML-Befehle für den Header, für das Einbinden des Stylesheets und für den
Beginn des Body auf die Standardausgabe geschrieben. In der Praxis sind noch einige weitere Angaben
notwendig (das Beispiel soll aber nicht unübersichtlich werden).
Zu beachten ist: wenn ein " ausgegeben werden soll, muss das durch die Zeichenkombination
\" geschehen.
{
if (NR==1) {
year=$2;
month=$1;
printf("\n <h2> %s %s </h2> \n \n", month, year);
}
if (NR==2) {
printf("\n <table border=\"1\" cellpadding=\"5\" cellspacing=\"5\" bgcolor=\"#DDDDDD\"> ");
printf("\n <tr> ");
for (i=1; i<=NF; i++) {
printf(" \n <th align=\"center\" width=\"12%\">%s </th>", $i);
}
printf("\n </tr>");
}
/* dieser Block wird fortgesetzt */
Wenn die erste Zeile (NR==1) bearbeitet wird,
werden Monatsname und Jahr in die beiden Variablen gespeichert und dann als Überschrift formatiert.
In der zweiten Zeile (NR==2) wird zuerst eine Tabelle begonnen.
Dann schreibt das awk-Script die Titel der einzelnen Tage als Tabellenkopf (<th>) in die HTML-Datei.
if (NR==3) {
printf("\n <tr> ");
for (i=1; i<=(7-NF); i++) {
printf(" \n <td> </td> ");
}
for (i=1; i<=NF; i++) {
printf(" \n <td align=\"center\"> %s </td>",$i);
}
printf("\n </tr>")
}
if (NR>3 && NF>0) {
printf("\n <tr>");
for (i=1; i<=NF; i++) {
printf(" \n <td align=\"center\"> %s </td>",$i);
}
for (i=NF+1; i<=7; i++) {
printf(" \n <td> </td> ");
}
printf("\n </tr>")
}
}
Im folgenden Codefragment werden die Abkürzungen der Wochentage durch die vollständigen
Namen ersetzt. Am Beispiel des Montag: entweder Mo oder Mon wird durch Montag ersetzt.
/* Beispiel 1 fuer eine Ersetzung von Ausdruecken: deutsche Wochentage. */
gsub(/So|Son/, "Sonntag");
gsub(/Mo|Mon/, "Montag");
gsub(/Di|Die/, "Dienstag");
gsub(/Mi|Mit/, "Mittwoch");
gsub(/Do|Don/, "Donnerstag");
gsub(/Fr|Fre/, "Freitag");
gsub(/Sa|Sam/, "Samstag");
Zum Schluss noch ein einfaches Shell-Script, das dieses Programm auf 12 Monate eines Jahres anwendet:
#!/bin/bash
monat=1
while [ $monat -lt 13 ]; do
cal -m $monat 2001 | gawk -f cal-ger.awk > cal$monat.html
let monat=monat+1
done;
Copyright © 2001 -Stefan Lagotzki-