01.03.2014 Aufrufe

Verwendung von grep awk-Programmierung

Verwendung von grep awk-Programmierung

Verwendung von grep awk-Programmierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!