04.11.2013 Aufrufe

Unix-Linux, Eine Einführung von Wolfgang Paulina (de)

Unix-Linux, Eine Einführung von Wolfgang Paulina (de)

Unix-Linux, Eine Einführung von Wolfgang Paulina (de)

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.

7. Textmusterverarbeitung mit awk 64<br />

Nicht erfüllte Bedingungen verursachen einen Sprung zur nächsten Bedingung. Aktionen stehen immer in<br />

geschweiften Klammern. <strong>Eine</strong> Aktion muss immer auf <strong>de</strong>rselben Programmzeile beginnen wie die zugehörige<br />

Bedingung. Ansonsten können awk-Programme formatfrei geschrieben wer<strong>de</strong>n. Aus Übersichtlichkeit<br />

ist aber eine tabellarische Struktur ratsam.<br />

Beispiele zu <strong>de</strong>n Anwendungsbereichen <strong>von</strong> awk:<br />

Datenauswertung und -aufbereitung<br />

rechner> awk ’{sum+=$1; print $1, sum}’ daten<br />

Summiert jeweils das erste Feld je<strong>de</strong>r Zeile in <strong>de</strong>r Variablen sum auf und gibt<br />

<strong>de</strong>n Feldwert und die Summe aus<br />

Datenvalidation<br />

rechner> awk ’/^[0-9]+$/ {print "Zeile ist numerisch:" $0}’ daten<br />

Alle Zeilen, die rein numerisch sind, wer<strong>de</strong>n ausgegeben<br />

Datentransformation<br />

rechner> awk ’$2=="OTTO" {$2="HANS"; print}’ daten<br />

Untersucht je<strong>de</strong> Zeile, ob das zweite Feld <strong>de</strong>n Inhalt OTTO besitzt und ersetzt OTTO durch<br />

HANS<br />

Bedingung o<strong>de</strong>r Aktion können auch weggelassen wer<strong>de</strong>n. Wenn nur <strong>de</strong>r Aktionsteil vorhan<strong>de</strong>n ist, wird<br />

dieser für je<strong>de</strong> Eingabezeile ausgeführt.<br />

{sum+=$1; print $1, sum}<br />

Wenn nur die Bedingung gegeben ist, wird die Eingabezeile vollständig in die Standardausgabe kopiert.<br />

$2=="OTTO" entspricht $2=="OTTO"{print}<br />

Ein- und Ausgabedatei wer<strong>de</strong>n als Folge <strong>von</strong> Zeilen gesehen, die durch ein Zeilentrennzeichen <strong>von</strong>einan<strong>de</strong>r<br />

getrennt wer<strong>de</strong>n. Je<strong>de</strong> Zeile besteht für awk aus einer Folge <strong>von</strong> Fel<strong>de</strong>rn, die durch Feldtrennzeichen getrennt<br />

sind. Die einzelnen Fel<strong>de</strong>r einer Zeile wer<strong>de</strong>n mit $1, $2, ... angesprochen. Die gesamte Eingabezeile<br />

wird mit $0 referenziert. Achtung: Die awk-Variablen $1, $2 usw. haben nichts mit <strong>de</strong>n gleichnamigen<br />

Variablen in shell-Skripten zu tun!<br />

rechner> awk ’{print $3, $1}’ daten<br />

rechner> awk ’{print $0}’ daten<br />

rechner> awk ’{print $2, $2, $2}’ daten<br />

Ausgabe <strong>de</strong>s dritten und ersten<br />

Fel<strong>de</strong>s je<strong>de</strong>r Zeile<br />

Ausgabe je<strong>de</strong>r Zeile<br />

Feld 2 wird dreimal hintereinan<strong>de</strong>r<br />

ausgegeben

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!