awk /Otto/ telefon
Alle Zeilen mit der Zeichfolge Otto in der Datei telefon werden ausgegeben. Wird kein Suchstring angegeben, werden alle Zeilen angezeigt.
Zur Projektion muß die Spalte angegeben werden und ein Kommando, was mit ihr passieren soll. Als Spaltentrenner gelten jede beliebige Kombination von Tabs oder Leerzeichen. Das einfachste Kommando ist die Ausgabe mittels print. Die Spalte wird durch deren Nummer und ein vorgestelltes Dollarzeichen bezeichnet. Die Zählung beginnt bei 1. $0 bezeichnet die gesamte Zeile! Aktionen werden immer in gescheifte Klammern gesetzt.
So kann die dritte Spalte einer Datei wie folgt ausgegeben werden:
awk '{print $3}'
Die Spaltentrenner werden nicht mit zugegriffen.
Die Kombination beider Optionen ist möglich. So würde das Kommando
awk '/Otto/ {print $3}' telefon
für alle Zeilen der Datei telefon, in denen die Zeichenfolge Otto steht, die dritte Spalte ausgeben.
Innerhalb des awk-Kommandos können Variablen verwendet werden. Diese sind lokal für awk. In diesen können z. B. Summen gebildet werden. Eine Deklaration ist nicht erforderlich.
Man kann drei Typen von Anweisungen unterscheiden. Die Standardanweisung kennen wir bereits. Sie wird auf jede selektierte Zeile angewandt. Daneben gibt es noch die Startanweisung, die genau einmal vor der ersten Verarbeitung ausgefuehrt wird und das Schlüsselwort BEGIN vorstellt. Die Endanweisung wird durch das Schlüsselwort END eingeleitet.
awk 'BEGIN{print"Hallo"} {print $3} END{print "Das wars"}' Datei
In Verbindung mit Variablen kann die END-Anweisung benutzt werden, um Summen oder andere Auswertungen zu fahren.
Beispiel: Summe aller Dateilängen mit der Endung gnt bilden:
Man gibt in der ersten Zeile das Kommando, um ein Verzeichnis anzusehen. Das Ergebnis wird dem awk per pipe zugeschoben. In der Standardanweisung wird eine Variable um den Wert in der fünften Spalte erhöht. Die Endanweisung gibt diese Variable aus.
ls -l *.gnt | awk '{sum+=$5}END{print sum}'Die Suche nach gnt könnte natürlich auch von awk uebernommen werden. Z. B. hiesse der Befehl dann
ls -l | awk '/gnt/ {sum+=$5} END{print sum}'
Der Unterschied liegt in diesem Falle darin, daß Zeilen, in denen irgendwo gnt (z. B. im Gruppennamen) vorkommt, auch mitgerechnet werden.
Einige Variablen sind im awk vorbesetzt:
NR | Nummer der aktuell bearbeiteten Zeile |
NF | Anzahl der Felder in der aktuellen Zeile |
RS | Trennzeichen zwischen Zeilen/Records |
ORS | Trennzeichen zwischen Zeilen fuer die Ausgabe |
FS | Feldseparator |
OFS | Feldseparator für die Ausgabe |
Funktion | Wirkung |
---|---|
Anzeigen | |
printf | Entspricht der C-Funktion printf |
sprintf | für Speicherung von Ausgaben in einer Variablen |
length(s) | ermittelt die Länge einer Zeichenkette |
substr(s, anf, anz) | Teilstringbildung |
index(s, t) | gibt die Stelle an, an der in s die Zeichenkette t beginnt |
sqrt(n) | Wurzel |
log(n) | natürlicher Logarithmus |
exp(n) | ex |
int(n) | ganzzahliger Anteil |
Mit den Variablen und Befehlen sind komplexe Programme zu erzeugen. Damit diese nicht jedesmal neu eingegeben werden muessen, kann man Dateien mit den auszuführenden Aktionen schreiben. Diese sind dann mit der Flag -f statt des Kommandos aufzurufen.
awk -f Befehle Datei
In der Datei Befehle stehen die Befehle für awk
Homepage | (C) Copyright 1999 Arnold Willemer |