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)
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