Shellprogrammierung - Mathematisches Institut

uni.math.gwdg.de

Shellprogrammierung - Mathematisches Institut

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Shellprogrammierung

Ein Mehrbenutzersystem in der Praxis - Grundlagen Linux

WS 2006-07

Mathematisches Institut Göttingen

Shellprogrammierung


awk ist eine Programmiersprache die auf strukturierte

Textdateien spezialisiert ist

Der Name awk setzt sich aus den Initialen der Erfinder

zusammen:

Alfred V. Aho, Peter J. Weinberger und Brian W.

Kernighan

Syntac ist C teilweise ähnlich; teilweise ist die Struktur

aber auch gänzlich anders

Ein awk-Programm besteht aus Funktionsblöcken die eine

Bedingung angeben können

Shellprogrammierung

awk: Einleitung

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Struktur eines awk-Programmes

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

Hier Abbildung einfügen!

BEGIN

Funktionsblöcke

END

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Struktur eines awk-Quelltextes

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

#!/usr/bin/awk -f

BEGIN {

...

}

/.../ {

}

/.../ {

}

Shellprogrammierung


Der Begin- und Endblock sind zur Initialisierung bzw.

Auswertung des Skriptes

Die Dateien, die von einem awk-Skript geparst werden,

werden zeilenweise mit den Funktionsblöcken abgearbeitet

Die Funktionsblöcke werden ausgeführt wenn die

Bedingung, also der reguläre Ausdruck, wahr ist

Die Funktionsblockbedingung kann aus mehreren

Bedingungen bestehen, die mit ——, && oder ! verknüpft

sind

Bsp.: awk ’{ print ”

Hello World“; }’ Eingabedatei

Shellprogrammierung

Das Wichtigste

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte


awk trennt jede Zeile in Felder auf

Das Trennzeichen steht in der Variablen FS (Field

Seperator), welches standardmässig ein Whitespace ist

Auf die Felder wird mit $1, $2, etc. zugegriffen; $0

beinhaltet die gesamte Zeile

Achtung: Dies ist eine Anlehnung an Shellsyntax! Variablen

in awk haben bei der Abfrage des Wertes nicht

grundsätzlich die Form $variablenname

Das Trennzeichen wird entweder beim Aufruf von awk mit

dem Argument-Fzeichen oder in dem BEGIN-Block

Shellprogrammierung

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Trennen von Feldern

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte


Einfache Beispiele

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

awk ’/ftp/{ print $0; }’ /etc/services

awk ’/ˆ$/{ print ”

Dies ist eine Leerzeile“; } eingabedatei

Angenommen wir hätten eine Adressdatei mit einem

solchen Format

Peter Meyer 49-551-12345678

awk ’{ print $2 ”

, ”

$1“, ”

$3 }’ würde solche Zeilen in

Meyer, Peter, 49-551-12345678 umformatieren

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Wichtige interne Variablen

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

FS - Fieldseperator

NF - Number of Fields

RS - Record Seperator

NR - Number of Records

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Arithmetische Operatoren

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

awk kennt die meisten Operatoren, die auch schon aus C

oder Java bekannt sind

(+, -, *, ++, +=, ...)

awk ist nicht typisiert - es kann also mit jeder Variable

gerechnet werden, die aus Zahlen besteht

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

Kontrollstrukturen und interne Funktionen

Kontrollstrukturen

Stimmen ebenfalls weitgehend mit C oder Java überein

(if, while, do ... while, for)

Interne Funktionen

awk bietet eine Reihe von eingebauten Funktionen an, die

primär im Bereich arithmetische Operationen und

Operationen mit Zeichenketten liegt

Einige numerische Funktionen

int(x) - schneidet Nachkommastellen ab

sqrt(x) - zieht Quadratwurzel aus x

rand() - liefert eine Zufallszahl zwischen 0 und 1

weitere: exp(x), log(x), sin(x), atan2(y,x), srand(x)

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Funktionen zur Stringmanipulation

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

length(string) - Anzahl der Zeichen in einem String

ohne das Argument string wird die Länge von $0

ausgewertet

match(string, regexp) - sucht nach dem regulärem

Ausdruck regexp in string und liefert den Index des ersten

Matches zurück

split(string,array,fieldsep) - teilt string anhand des fieldsep

und speichert die einzelnen Teile in array

sprintf(format, expression1,..) - erlaubt eine

Stringformatierung wie in C

sub(regexp, replacement, target)

Shellprogrammierung

- durchsucht target nach


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Funktionen zur Stringmanipulation (2)

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

gsub(regexp, replacement, target) - wie die Funktion sub,

nur werden hier alle Matches ersetzt

tolower(string) - liefert eine Kopie von string zurück in der

alle Grossbuchstaben durch ihre entsprechenden

Kleinbuchstaben ersetzt wurden

toupper(string) - liefert eine Kopie von string zurück in der

alle Kleinbuchstaben durch ihre entsprechenden

Grossbuchstaben ersetzt wurden

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Eingebaute Input/Output-Funktionen

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

system(kommando) - erlaubt Systemkommandos von einem

awk-Skript aus aufzurufen

close(filename) - schliesst eine Datei oder Pipe

getline - liest eine weitere Zeile aus der Eingabe

getline kann auch aus einer Datei oder Pipe lesen, z.B. liest

getline ¡ ”

data“die nächste Zeile aus der Datei data

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Assoziative Arrays

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

awk kennt assoziative Arrays

Im Gegensatz zu normalen Arrays wird hier kein

numerishce Wert als Index genommen, sondern ein

beliebiger Wert (Zahl oder String)

Beispiel:

#!/bin/awk -f

# awk-skript freespace

{

free[$1]=$4;

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Funktionen in awk

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

In awk kann man selbstverständlich auch eigene

Funktionen schreiben

function name(parameter ...) {

statements

return ...;

}

Funktionen stehen oberhalb aller Programmblöcke

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Interessante Besonderheiten

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

Bei einem if/else-Konstrukt ist es möglich direkt gegen

einen regulären Ausdruck zu testen

if (variable regexp) { ... }

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einbindung in Shellskripte

Struktur

Quelltext

Das Wichtigste

Trennen von Feldern

Einfache Beispiele

Interne Variablen

Arithmetische Operatoren

Kontrollstrukturen und interne Funktionen

Stringmanipulation

Stringmanipulation (2)

Eingebaute IO-Funktionen

Assoziative Arrays

Funktionen in awk

Besonderheiten

Einbindung in Shellskripte

Ein awk-Skript wird wie ein geöhnliches Kommando in

einem Shellskript aufgerufen

Der Quelltext steht in einfachen Anführungszeichen als

Argument

Sollen Variablen vom Shellskript an das awk-Skript

durchgereicht werden geschieht dies über die Syntax

awk ’quelltext’ parametername= ”

$shellvariable“

Die Ausgabe des awk-Skriptes kann auf übliche Weise mit

den Backticks zurück in eine Variable geschrieben werden

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einleitung

Adressbereich und reguläre Ausdrücke

Einige Kommandos

Ersetzungen

Beispiele

Gruppierung von Kommandos

Einleitung

sed steht für Stream Editor“


sed ist prinzipiell ein vollständiger Editor, der allerdings im

Gegensatz zu anderen Editoren nicht interaktiv ist -

sondern kommandoorientiert

D.h. er liest auf einer Eingabe, macht damit irgendwas und

gibt wieder etwas aus

Demnach ist er sehr geeignet für die Verwendung innerhalb

von Shellskripten

sed wird im Normalfall nciht benutzt um z.B. eine einzelne

Änderung an einem Text vorzunehmen, sondern eine ganze

¨

Shellprogrammierung


Editoren wie vi bieten ebenso Funktionen wie

Textersetzung, Zeilenlöschung, Texteinfügung, etc.

sed kann solche Textbearbeitungen an einer Stelle

definieren und in einem ’Rutsch’ auch auf mehrere Dateien

abarbeiten

sed arbeitet ausserdem sehr schnell auf sehr grossen

Textdateien - die interaktiv nur langsam editierbar wären

Syntax: sed [Adresse] Kommando datei

Bsp.: ps — sed ’1d’

sed löscht die erste Zeile der Ausgabe von ps (Überschrift)

Shellprogrammierung

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einleitung

Adressbereich und reguläre Ausdrücke

Einige Kommandos

Ersetzungen

Beispiele

Gruppierung von Kommandos

Einleitung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einleitung

Adressbereich und reguläre Ausdrücke

Einige Kommandos

Ersetzungen

Beispiele

Gruppierung von Kommandos

Adressbereich und reguläre Ausdrücke

sed arbeite wie awk ebenfalls ein eDatei zeilenweise ab

sed-Kommandos bestehen immer aus nur einem

Buchstaben

sed-Adressen können folgendes sein:

Eine Zeilennummer

first step match Zeilen nach der Formel first + (n ∗ step),

also z.B. 1 2 für alle ungeraden Zeilen

Ein regulärer Ausdruck /regexp/, /regexp/I für

case-insenitiv

Ein regulärer Ausdruck, z.B. %regexp% und %regexp%I,

mit anderen Delimitern (z.B. wenn ’/’ im Ausdruck

Shellprogrammierung


Beispiele:

cat /etc/services — sed -e ’1,5d’

Gibt /etc/services mit den ersten 5 Zeilen gelöscht auf die

Standardausgabe aus

cat /etc/services — sed -e / ˆ#/d

Auf der Standardausgabe erscheint /etc/services mit

gelöschten Kommentarzeilen (Zeilen, die mit # eingeleitet

werden)

a\text (append text) - hängt an die angegebene Adresse

text an

d (delete) - es wird die ganze Zeile gelöscht

Shellprogrammierung

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einleitung

Adressbereich und reguläre Ausdrücke

Einige Kommandos

Ersetzungen

Beispiele

Gruppierung von Kommandos

Einige Kommandos


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einleitung

Adressbereich und reguläre Ausdrücke

Einige Kommandos

Ersetzungen

Beispiele

Gruppierung von Kommandos

Ersetzungen

s/regex/replacement/flags (search an replace) - ersetzt bei

jedem Match des regulären Ausdrucks regex diesen mit

replacement

flags kann z.B. folgende Werte annehmen

eine Zahl zwischen 1 und 512 für die Nummer des Matches,

der ersetzt werde soll

g - ersetzt alle Matches

I - matchet den geulären Ausdruck case-insensitiv

wdateiname - schreibt nach der Ersetzung das Ergebnis in

Dateiname. Zwischen ’w’ und ’dateiname’ darf kein

Leerzeichen sein!

replacement kann wie bei der Funktion sub/gsub in awk

auch das & als Platzhalter

Shellprogrammierung

fur das gematchte Pattern


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einleitung

Adressbereich und reguläre Ausdrücke

Einige Kommandos

Ersetzungen

Beispiele

Gruppierung von Kommandos

Beispiele

p gibt veränderte Pattern auf die Standardausgabe aus.

Diese Option macht nur Sinn in Verbindung mit der

Ausgabeunterdrückungsoption -n. Ansonsten werden Zeilen

doppelt ausgegeben

Zum Ausführen mehrer Kommandos werden diese einfach

hintereinander gehängt

Beispiele:

sed s/ZUM/BLABLABLA/I 1woutput2 test - ersetzt

case-insensitiv das erste Vorkommnis von ’zum’ in der Datei

text mit ’BLABLABLA’ und schreibt das Ergebnis in die

Datei ’output2’

Shellprogrammierung


Da bei Gruppen newlines erwartet Shellprogrammierung werden bietet es sich an

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Einleitung

Adressbereich und reguläre Ausdrücke

Einige Kommandos

Ersetzungen

Beispiele

Gruppierung von Kommandos

Gruppierung von Kommandos

sed Kommandos können auch gruppeirt werden. Man

macht es, damit

Mehrere Adressen ineinander verschachtelt werden können

Mehrere Kommanods an einer Adresse ausgeführt werden

Syntax:

Adresse{

Kommando1

Kommando2

}


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

Weitere Programmiersprachen

TCL (Tool Command Language)

Perl (Practical Extraction and Report Language)

Python

Ruby

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

Wichtige Kommandos

Im Skript unter Kapitel 14 zu finden:

sort

uniq

comm

diff

grep

tr

cut

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

sort

kann sortieren, zusammenmischen und auf Sortierung

prüfen

Sortierreihenfolge ist umkehrbar

Das Feldtrennzeichen wird durch das Argument -t geändert

Die Feldnummer hat das Argument -k Feld[.Offset]

Umkehrung der Sortierreihenfolge: -r

Sortieren nach Zahlen: -n

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

uniq

löscht identische Zeilen gemäss dem Kommandoaufruf

z.B. für das Löschen von doppelten Zeilen: -d

Sollte interessieren wieviele Zeilen gelöscht wurden: -c

Wenn der Aufbau der Zeile tabellarisch ist, können Felder

für die Analyse übersprungen werden; z.B. weil sie für das

Löschen nicht relevant sind: –skip-fields

uniq ist nützlich wenn Datensätze aus verschiedenen

Dateien kombiniert und Duplikate entfernt werden sollen

oder es hilf bei der Analyse von Logdateien

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

comm und diff

comm

vergleicht sortierte Textdateien

gibt drei Spalten aus:

1. Spalte: Zeilen, die nur in der ersten Datei enthalten sind

2. Spalte: Zeilen, die nur in der zweiten Datei enthalten sind

3. Spalte: Zeilen, die in beiden Dateien identisch sind

mit -1, -2, -3 lassensich die Spalten jeweils auch ausblenden

diff

findet Unterschiede in Textdatein ein erzeugt eine Ausgabe

die von anderen Programmen (z.B. patch) verwendet

werden kann

Shellprogrammierung


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

grep

grep (global regular expression print)

durchsucht beliebige Textdateien nach angegebenen

Suchmuster (regulärem Ausdruck)

Arbeitet Zeilenweise

Alle Zeilen, die zum Suchmuster passen, werden auf die

Standardausgabe geschrieben

Shellprogrammierung


Bsp.: grep ftp /etx/services - sucht nach dem Begriff ftp in

der Datei /etc/services

-i - Wenn Suche case-insensitiv sein soll

-v - Soll die Ausgabe invertiert werden (Ausgegeben werden

alle ZEilen in denen das Muster nicht gefunden wird

-n - Anzeige der Zeilennummern der Treffer

-l - Nur Anzeige des Dateinamens und nicht der Trefferzeile

-C - Anzeige des Kontextes der Trefferstelle

Varianten von grep:

egrep - kann auch die erweiterte Syntax regulärer Ausdrücke

fgrep - sucht nur nach konstanten Shellprogrammierung Strings und ist daher

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

grep Parameter


Ähnlich der yank Funktionalität von sed: ersetzt einzelne

Zeichen

Kennt keine Suchmuster oder Kontextabhängigkeiten

Bsp.: echo ’Hallo’ — tr ’[:lower:]’ ’[:upper:]’

- ersetzt alle Kleinbuchstaben durch Grossbuchstaben

Das sind keine regulären Ausdrücke, sondern nur

Zeichenketten

Option -d löscht die angegebenen Zeichen

Häufige Anwendung: Löschen von Carriage-Return aus

Windows-Textdateien

Shellprogrammierung

awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

tr (transform)


awk

sed

Weitere Programmiersprachen

Wichtige Kommandos

sort

uniq

comm und diff

grep

grep Parameter

tr

cut

cut

gibt bestimmte Teile einer Zeile einer Datei aus (ähnlich

$1, .. in awk)

Delimitor Zeichen: -d[zeichen]

Feldauswahl: -f[feldnummer]

Zeichenauswahl: -b[zeichennr-zeichennr]

Bsp.: Ausgabe der Namen aus /etc/passwd

cut -d: -f5 /etc/passwd

Shellprogrammierung

Weitere Magazine dieses Users
Ähnliche Magazine