Verwendung von grep awk-Programmierung
Verwendung von grep awk-Programmierung
Verwendung von grep awk-Programmierung
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Unix für Entwickler Praktikum 4<br />
Es wird empfohlen, für jede Teilaufgabe eine eigene Datei zu erstellen. So<br />
können Sie auf einmal funktionierende Dateien aufbauen und verlieren durch<br />
ausprobieren nicht ihren vorherigen Stand.<br />
Teil I<br />
<strong>Verwendung</strong> <strong>von</strong> <strong>grep</strong><br />
Im Verzeichnis /usr/share/dict auf 141.100.70.17 (SSH-Verbindung mit Ihrem ufe-<br />
Benutzer) gibt es eine Datei/Symlink mit Namen words. Diese beinhaltet eine englische<br />
Wortliste, die Sie verwenden sollen, um mittels <strong>grep</strong> die Lücken in den folgenden Wörtern<br />
zu finden. Suchen Sie dazu aus der <strong>grep</strong>(1) man page die Optionen zum suchen <strong>von</strong><br />
Wörtern nach regulären Ausdrücken und zum ignorieren <strong>von</strong> Gross- und Kleinschreibung.<br />
Schreiben Sie für jedes Wort den passenden regulären Ausdruck, um das gesuchte Wort<br />
eindeutig 1 zu finden.<br />
1. Wort: ma__d__o_s 4. Wort: _e__p_o_it_<br />
2. Wort: _re___o__n__ 5. Wort: a__l_______t___<br />
3. Wort: ____i_u_____________ 6. Wort: g_a___e__n___<br />
Teil II<br />
<strong>awk</strong>-<strong>Programmierung</strong><br />
In diesem Teil des Praktikums sollen Sie ein praktisches Verständnis entwickeln, wie man<br />
mit <strong>awk</strong> schnell kleine Programme entwickeln kann, um entsprechende Analysen und<br />
Formatierungen an Dateien vorzunehmen, für die man manuell viel mehr Zeit benötigen<br />
würde. Falls Sie es noch nicht getan haben, sehen Sie sich die Manual Seite <strong>awk</strong>(1) als<br />
Vorbereitung an und schlagen Sie dort ggfs. während des Praktikums nach.<br />
Verwenden Sie die Datei Hauptstaedte aus dem 2. Praktikum als Eingabedatei im<br />
CSV-Format. Diese Eingabedatei darf nicht verändert werden, sondern soll in dieser Form<br />
als Quelle für ihr <strong>awk</strong>-Programm dienen.<br />
Aufgaben<br />
1. Sehen Sie sich den Kopf der Datei mit dem head Programm an. Die erste Kommentarzeile<br />
beschreibt den Aufbau der Datei. Schreiben Sie ein <strong>awk</strong>-Programm, welches einen<br />
Beschreibungstext für die Spalten als Kopf und anschliessend den Inhalt der Datei<br />
selbst ausgibt.<br />
2. Fügen Sie auch an das Ende der Ausgabe des Dateiinhalts den gleichen Beschreibungstext<br />
für die Spalten ein. Damit braucht man dann, wenn alle Zeilen ausgegeben<br />
1 Auf diese Weise haben Sie eine einfache Möglichkeit, z.B. Kreuzworträtsel zu lösen, sofern Sie eine<br />
entsprechende Wortliste besitzen.<br />
Seite 1 <strong>von</strong> 3
Unix für Entwickler Praktikum 4<br />
wurden, nicht zurückscrollen, um die Spaltenüberschriften nochmal zu sehen. Schreiben<br />
Sie sich dazu eine eigene <strong>awk</strong>-Funktion mit passendem Namen und rufen Sie diese<br />
Funktion an den entsprechenden Stellen auf.<br />
3. Erweitern Sie ihr vorheriges Programm so, dass alle 30 Zeilen die Header erneut<br />
ausgegeben werden, bevor die nächste Zeile in der Ausgabe erscheint.<br />
4. Benutzen Sie die <strong>von</strong> <strong>awk</strong>(1) zur Verfügung gestellten Variablen, um am Schluss eine<br />
Zusammenfassung der Datei auszugeben. Geben Sie dazu den Dateinamen und die<br />
Anzahl Zeilen in der Datei aus.<br />
5. In <strong>awk</strong>(1) steht beschrieben, wie man statt des Leerzeichens/Tabulators als Feldtrenner<br />
einen eigenen Feldtrenner angeben kann. Nutzen Sie diesen, um die Trennzeichen<br />
(,) zwischen den einzelnen Datensätzen zu entfernen und die Datei nun sauber formatiert<br />
im Spaltenformat auszugeben.<br />
6. Gehen Sie nun mehr auf den Inhalt der Datei ein. Ermitteln Sie mit <strong>awk</strong> im einzelnen:<br />
• Wieviele Einwohner haben alle Hauptstädte insgesamt?<br />
• Was ist die mittlere Grösse aller Hauptstädte und welche Stadt kommt dieser<br />
Zahl am nächsten?<br />
• Wie heisst die Stadt mit der grössten/kleinsten Einwohnerzahl?<br />
• Welcher Kontinent hat die meisten Hauptstädte?<br />
• Wieviele Einwohner haben die Hauptstädte jedes Kontinents jeweils?<br />
Schreiben Sie für jede Abfrage ein eigenes <strong>awk</strong>-Skript.<br />
7. Das Programm uptime zeigt (neben anderen Informationen) die Anzahl der Tage an,<br />
die das System bereits läuft. Zeigen Sie nur die Anzahl der Tage an, indem sie a) ein<br />
<strong>awk</strong>-Kommando benutzen und b) den cut-Befehl.<br />
Teil III<br />
Shellskripte mit <strong>grep</strong> und <strong>awk</strong><br />
Nutzen Sie in diesem Teil Shellskripte, in denen <strong>grep</strong> und <strong>awk</strong> enthalten sind, um die<br />
folgenden Aufgaben zu lösen.<br />
1. Aufgabe: Freitag der 13. gilt bei abergläubischen Menschen als Unglückstag 2 . Egal,<br />
ob Sie daran glauben oder nicht, Sie sollen folgendes ermitteln: geben Sie für die<br />
nächsten 50 Jahre alle Jahre und die dazugehörigen Monate aus, in denen der 13.<br />
eines Monats auf einen Freitag fällt. Geben Sie diese Daten n tabellarischer Form<br />
aus. Einen Kalender erhalten Sie über das Programm cal bzw. ncal.<br />
2. Aufgabe: Susi Sonnenschein freut sich auf Ihren 18. Geburtstag am 1. Mai 2013, denn<br />
dann darf Sie das erste Mal Blut spenden. Sie hat sich vorher gründlich informiert<br />
und weiss über die Blutspende folgende Fakten:<br />
2 Zu den Details siehe: http://de.wikipedia.org/wiki/Freitag,_der_13.<br />
Seite 2 <strong>von</strong> 3
Unix für Entwickler Praktikum 4<br />
• Gesunde Menschen können bis zu sechsmal jährlich Blut spenden.<br />
• Zwischen zwei Spenden muss eine Ruhezeit <strong>von</strong> jeweils zwei Monaten eingehalten<br />
werden, es werden jedoch drei empfohlen. Der Mindestabstand zwischen<br />
zwei Vollblutspenden beträgt in Deutschland (Susis Wohnort) 56 Tage (acht<br />
Wochen).<br />
Wieviele Blutspenden kann Susi unter der Annahme, dass Sie immer gesundheitlich<br />
und terminlich dazu in der Lage ist, insgesamt bis zu Ihrem 70. Lebensjahr absolvieren?<br />
Berechnen Sie die jeweiligen Daten der Blutspendetermine unter Berücksichtigung<br />
der oben genannten Fakten zur Blutspendeanzahl pro Jahr und der Ruhezeit.<br />
Geben Sie die berechneten Werte in folgendem Format aus:<br />
Spende Nr. Spendedatum Susis Alter<br />
1 01.05.2013 18<br />
2 ... ...<br />
Mit dem Kommando date lassen sich über den Parameter -r Unix-Zeitstempel (Sekunden<br />
seit dem 1.1.1970) erzeugen, mit denen Sie durch Addition neue Daten berechnen<br />
und formatiert ausgeben können.<br />
3. Aufgabe: Erweitern Sie das Blutspende Programm so, dass Susi an einem Freitag,<br />
den 13. nicht zur Blutspende geht und stattdessen am darauffolgenden Tag spendet.<br />
Vermerken Sie das in der Ausgabe durch eine extra Zeile in der Form:<br />
Spendedatum: 13.05.2022 fällt auf einen Freitag, nächste Spende: 14.05.2022<br />
4. Aufgabe: Angenommen, Susi würde für jede abgegebene Spende als Aufwandsentschädigung<br />
einen Betrag <strong>von</strong> 15 Euro erhalten. Bei jeder Jubiläumsspende (5., 10.,<br />
20., 25., 50., 75. und 100. Spende) erhält Sie stattdessen genau diesen Betrag (also<br />
25. Euro bei der 25. Spende). Wieviel Geld hat Susi dadurch insgesamt erhalten? Erweitern<br />
Sie die Ausgabe des Programms aus Aufgabe 2 so, dass auch die Geldbeträge<br />
ausgegeben werden und eine Summe gebildet wird:<br />
Spende Nr. Spendedatum Susis Alter erhaltener Betrag Gesamtsumme<br />
1 01.05.2013 18 15 Euro 15 Euro<br />
2 ... ... 15 Euro 30 Euro<br />
3 ... ... ... ...<br />
5. Aufgabe: Erweitern Sie das Programm so, dass das Anfangsdatum der ersten Spende<br />
und das maximale Alter per Parameter an das Shellskript übergeben werden können.<br />
Seite 3 <strong>von</strong> 3