5 par2sfs, awk und sed

Ähnliche Dokumente
3 Verarbeitung von symbolischen Daten

Elementare Unix-Befehle 11

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

Praktische Übung. Die Lernplattformen ILIAS ist mit Stud.IP verbunden, sodass Sie Lernmodule dieser Plattform

Unterschiede in Dateien mit diff

Musterlösung Klausur 11/ Fragen zu utf-8: 1.1. Welche zwei Methoden gibt es, um STDIN und STDOUT auf utf-8 zu setzen.

UNIX Power Tools. Helferlein für den Alltag. Maximilian Haupt

Vorlesung Unix-Praktikum

Grundlagen der Programmierung

Linux I II III Res/Pro WN/TT Reguläre Ausdrücke Editoren Scripting. Linux II. 2 Linux II. Reguläre Ausdrücke Editoren Scripting. Ressourcen-Vorkurs

4 Suchen in symbolischer Information

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

15 Der AWK. (Aho, Weinberger, Kernighan)

Systemverwaltung mittels Skripts

Der UNIX-Werkzeugkasten Programmieren mit UNIX

lex - Eine Einführung

Computer & GNU/Linux Einführung Teil 4

Programmieren mit dem TI-92

Linux Kommandozeile: Einfache Skripte. 1 Wiederhohlung. 2 Einfache Skripte

01 Einführung in PHP. Einführung in PHP 1/13 PHP in Aktion

ZWEITE ÜBUNG ZUR EINFÜHRUNG IN DIE PROGRAMMIERUNG FÜR COMPUTERLINGUISTEN LEONIE WEIßWEILER

Unix/Linux Grundlagen für Einsteiger

Übung zur Vorlesung Strukturiertes Programmieren WS 2014/15. Übungsblatt 1: JAVA - Erste Schritte Abgabe: Besprechung:

Arbeiten in der Unix-Kommandozeile

Arbeiten in der Unix-Kommandozeile

Ein- und Ausgabeumlenkung

Programming 101. Carl Herrmann IPMB & DKFZ

Werkzeuge der Sprachverarbeitung

1.103 Regular Expressions - Reguläre Ausdrücke

Einführung in die Programmierung für Computerlinguisten

Crashkurs Kommandozeile

I Grundlagen der System-Administration 8

Basiskonzepte des Rechnerbetriebs

KLAUSUR ZUM BACHELORMODUL,,EINFÜHRUNG IN DIE PROGRAMMIERUNG WS 2011/12, DR. MAXIMILIAN HADERSBECK KLAUSUR AM

Shell-Scripting Teil 2 - Reguläre Ausdrücke

Exkurs: Unix Programme

Benutzung der Manpage, Shell Teil 3

Unix-Grundkurs 1. Thema heute: Shell-Skripten

UNIX/Linux Lösung. Mär 14, 17 20:40 Seite 1/6. Prozeßsynchronisation (was ist das?, wo kommt es vor?, Beispiel?):

Funktionen in JavaScript

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen.

1.103 Grundlagen der Dateibearbeitung mit vi

Einführung in die Computerlinguistik Einführung in Perl (1)

Dateisystem 2, RegEx, Manpages

Stream EDitor SED und Reguläre Ausdrücke

Deshalb ist hello + world = 0. Umgekehrt gilt das Gleiche, weshalb 8 plus 3 gleich 83 ist. Dies ist in Zeile 5 in Terminal 2 gezeigt. In der Regel sol

Technische Praxis der Computersysteme I 3. Vorlesung

Strukturiertes Programmieren

Programmierwerkzeuge unter Unix

Familie von Zeichenkettensuchprogrammen "grep", "egrep", "fgrep"

Übung 2 - Betriebssysteme I

C-Programme erstellen und ausführen

Vorlesung Unix-Praktikum

Übersicht Shell-Scripten

Bash-Skripting Linux-Kurs der Unix-AG

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

4 Schleifen und Dateien

Okt 10, 16 17:29 UNIX/Linux Lösung

Übungszettel 2a - Python

Sep 25, 18 8:36 UNIX/Linux Lösung

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Übung 4: Schreiben eines Shell-Skripts

Programmsteuerung mit PHP - if/else, elseif,switch

Linux I II III Res WN/TT NLTK XML Weka E Rechte Encoding. Linux III. 3 Linux III. Rechte Encoding. Ressourcen-Vorkurs

Übungsblatt 1. Java Vorkurs (WS 2017)

8 Sound exchange - sox

Basiskonzepte des Rechnerbetriebs

Kapitel 1: Informationsverarbeitung durch Programme

Funktionen in JavaScript

Greenfoot: Verzweigungen

Lektion 2: Prozeduren

Effizientes Arbeiten mit dem Emacs. Suchen und Ersetzen.

41.2 LUA Grundlagen - Funktionen

Das CIP der Mathematik

Arbeiten mit der Shell Teil 2

GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT

Vorlesung Unix-Praktikum

Arbeiten in der Unix-Kommandozeile. PeP et al. Toolbox Workshop

Effizientes Arbeiten mit dem Emacs. Suchen und Ersetzen.

Ihr Heimatverzeichnis. Die Ausgangsverzeichnisse für die neu zu erstellenden Verzeichnisse sind folgender Tabelle zu entnehmen:

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Kontrollstrukturen. Verzweigungen Einfache Mehrfache Wiederholungen Eine Sequenz durchlaufen Wiederhole bis Solange. Tue

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi

Vorbemerkung. Allgemeines zu Shell Scripts. Aufruf. Einfaches Beispiel

Rückgabewerte von Methoden

Arbeiten mit der Shell Teil 2

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Eine JAVA Einführung ... Quellcode:... COMA Übung 3. T.Bosse. A.Griewank. Vorschau JAVA Programme Sprachen Kate

Greenfoot: Verzweigungen Nicolas Ruh und Dieter Koch

Eine kurze Einführung in Vim

UNIX Die wichtigsten Befehle

Grundlagen der Informatik Vorlesungsskript

Kapitel 1: Informationsverarbeitung durch Programme

Vorlesung Unix-Praktikum

Der vi Editor. Vortrag im Rahmen des Proseminars Unix Tools an der Technischen Universität München im Sommersemester 2005

EiP Übung

Transkript:

5 par2sfs, awk und sed Loggen Sie sich ein und gehen Sie ihr zugewiesenes Gruppen-Directory (z.b. cip3). Arbeiten Sie immer nur in Ihrem Gruppen-Directory. cip1 % cd SS08/cip3 5.1 Visualisierung einer Partitur: par2sfs und Es In Ihrem Directory befinden sich folgende neue Dateien: g121axx0_000_olv.nis : g121axx0_000_olv.par : Sounddatei im NIST Format Zugehöriges Partitur-File Schauen Sie sich das Partitur-File an und identifizieren Sie die eingetragenen Spuren. cip1 % less g121axx0_000_olv.par Hören Sie sich das Signal an. cip1 % test_nist p=1 g121axx0_000_olv.nis Wandeln sie das Partitur-File und das zugehörige Signalfile in ein SFS-Archiv-File um. cip1 % par2sfs cip1 % par2sfs sptype=nist g121axx0_000_olv.par g121axx0_000_olv.nis... Der Befehl par2sfs zeigt Ihnen, welche tiers er erfolgreich einbinden konnte. Schauen Sie sich das SFS-Archiv-File mit dem Display-Programm Es an: cip1 % Es -t g121axx0_000_olv.sfs Spielen Sie ein wenig mit dem Beipiel herum: probieren Sie die Cursor aus (Linke und rechte Maustasten), Zoomen Sie hinein (Z), wieder heraus (T), hören Sie sich einzelne Segmente an, etc. 5.2 Arbeiten mit gawk Gawk ist ein Programm, das genau wie grep Files zeilenweise nach Mustern (regulären Ausdrücken) absucht und für jedes Muster eine bestimmte Aktion durchführen kann. Der simpelste Aufruf von gawk ist cip1 % gawk <Programm> <Input-File> Ein GAWK-Programm besteht immer aus folgenden Kommandos: <Muster1> { Aktion1 <Muster2> { Aktion2... 28

gawk sucht dann in jeder Zeile des Files nach den Mustern und wenn es eines davon findet, wird die entsprechende Aktion dahinter ausgeführt. Zum Beispiel gibt folgender Befehl cip1 % gawk /^ORT/ { print $3 g121axx0_000_olv.par nur die dritte Spalte ($3) aus allen Zeilen, die mit ORT beginnen auf den Bildschirm (standard output). Wenn man das Muster weglässt, wird jede Zeile verarbeitet: cip1 % gawk { print $3 g121axx0_000_olv.par Bei längeren Programmen ist es handlicher, diese nicht immer wieder einzutippen, sondern in einem File zu speichern. Außerdem will man fast immer viele Files auf einmal in einer Pipe verarbeiten. Der Aufruf sieht dann so aus: cip1 % cat file1 file2 file3... gawk -f <Programm-File> Schreiben Sie mit einem Editor (z.b. pico) folgendes Programm in das File hesi.awk (achten Sie darauf in Ihrem Gruppen-Dir zu sein!): BEGIN { count = 0 /^ORT:.*<"ah>/ { /^ORT:.*<"ahm>/ { /^ORT:.*<hm>/ { END { print "Anzahl der Hesitationen: " count Rufen Sie es auf mit dem Befehl cip1 % cat../partitur/* gawk -f hesi.awk Genau wie andere Skriptsprachen kennt gawk Variablen und Kontroll-Kommandos (if-verzweigung, Schleifen, etc.). Eine vollständige Beschreibung der Sprache ist in der Manual-Page von gawk zu finden: cip1 % man gawk Erweitern Sie Ihr Programm-File so, daß es außerdem noch die Anzahl der Wörter insgesamt ausgibt (zweiter Zähler, Muster für ORT-Zeilen). Erweitern Sie Ihr Programm-File so, daß es außerdem noch die relative Anzahl von Hesitationen pro Wort ausgibt. Testen Sie nun alle Sprecher (w.o.), Münchner Sprecher (cat../partitur/m???d*), Karlsruher Sprecher (cat../partitur/n???k*), Bonner Sprecher (cat../partitur/m???n*) und Kieler Sprecher (cat../partitur/j???a*) Wer verwendet im Mittel mehr Hesitationen? 29

5.3 Automatisches Editieren mit sed Wir haben schon in den ersten Stunden sog. Filter kennengelernt, die Operationen auf Text-Files automatisch ausführen können. Bestes Beispiel für ein Filterprogramm ist der UNIX-Befehl tr (translate), der einzelne Zeichen vertauschen, zusammenfassen ( squeezen ) oder löschen kann. cip1 % echo "Mein Geld" tr M D Manchmal reicht die einfache Funktionalität von tr nicht mehr aus, z.b. wenn man längere Zeichenketten ersetzen möchte. Nehmen wir an, wir haben einen Fehler in unseren Partitur-Files entdeckt. Und zwar hat jemand konsequent n"ahmlich statt n"amlich geschrieben. Wir können das z.b. für die Münchner Files feststellen mit dem Befehl: cip1 % grep n"ahmlich../partitur/m???d* Wir können jetzt nicht einfach mit tr alle h -Zeichen löschen; also brauchen wir einen komplexeren Mechanismus, der sämtliche Editierfunktionen beherrscht. Der stream editor sed ist so ein komplexes Filter. Genauso wie tr ließt er von standard input, filtert das File und schreibt es wieder nach standard output. cip1 % echo n"ahmlich cip1 % echo n"ahmlich sed s/n"ahmlich/n"amlich/ Der allgemeine Aufruf von sed ist sehr ähnlich wie bei gawk : cip1 % cat file sed <Programm> Das Programm bei sed besteht nur aus einzelnen Editierbefehlen. Von allen Befehlen der wichtigste (und am häufigsten gebrauchte) ist der substitute Befehl: s/muster/replacement/ Also wird in obigem Beispiel der String n"ahmlich durch den String n"amlich ersetzt. Ein kleines angehängtes g ( global ) bewirkt, dass alle vorkommenden Muster in einer Zeile ersetzt werden (sonst nur das erste auftretende Muster): s/muster/replacement/g Der Muster-Teil des substitute Befehls ist wie bei gawk oder grep ein regulärer Ausdruck. Nochmal zur Wiederholung: ^ : Zeilenanfang $ : Zeilenende. : ein beliebiges Zeichen * : eine beliebige Wiederholung [xyz] : Eines von x oder y oder z [a-g] : Ein Zeichen von a bis g [^xyz] : Ein Zeichen, das nicht x oder y oder z ist \( \) : Musterklammerung (kann im Replacement-Teil mit \1 wieder eingesetzt werden) Kopieren Sie sich das fehlerhafte File in Ihr Gruppen-Dir. Ersetzen Sie mit sed in dem fehlerhaften File alle falschen nähmlich durch nämlich. 30

6 Übung zu sed und awk 6.1 Aufgabe Stellen Sie sich vor, die Steuerfahndung steht vor der Tür und sie haben auf Ihrem PC noch sämtliche gefälschten Bilanzen gespeichert. Einfach Löschen geht nicht, weil die Beamten dann misstrauisch werden. Sie müssen ganz schnell handeln, weil Sie die Steuerfahnder schon auf der Treppe hören. 1. Entwerfen Sie ein sed Programm, das im eingegebenen Text sämtliche vorkommende EUR- Beträge bis 999 EUR durch XXX ersetzt, also z.b. EUR 445,78 -> EUR XXX,78 EUR 87,00 -> EUR XXX,00 (beachten Sie, daß das Komma noch an der richtigen Stelle steh Andere Zahlenangaben sollen aber erhalten bleiben, z.b. 4. Vorstandssitzung -> 4. Vorstandssitzung Testen Sie Ihren Befehl mit der Datei Bilanzen in Ihren Gruppendirectory. % cat Bilanzen sed PROGRAM less 2. Sind Beträge mit verschieden langen Lücken zwischen EUR und dem Betrag korrekt abgebildet worden? Z.B. EUR 45,78 -> EUR XXX,78 Wenn nicht, erweitern Sie den Befehl dazu, daß diese auch erfasst werden. Könnten Sie Ihren Befehl so modifizieren, daß die Länge der Lücke genau gleich bleibt? 3. Jetzt sollen auch Tausender und Millionenbeträge (auf die kommt es ja an!) alle korrekt abgebildet werden, z.b. EUR 1.900.000,- -> EUR XXX,- 4. Das folgende macht zwar keinen unmittelbaren Sinn, wenn die Steuerfahndung kommt, aber es ist eine schöne Übung: Schreiben Sie ein gawk Programm, das im Inputfile nach allen EUR-Beträgen sucht und diese korrekt zusammenaddiert und schließlich die Summe ausgibt. Tip: Schreiben Sie Ihr gawk Programm nicht mehr auf die Kommandozeile (wie in den Beispielen oben), sondern in ein Programm-File. Der Aufruf ändert sich dann zu: % cat Bilanzen gawk -f PROGRAMM-FILE Auf diese Weise können sie leichter mehrzeilige Programme schreiben und müssen nicht dauernd auf der Kommandozeile editieren. Gehen Sie schrittweise vor: Schreiben Sie zunächst ein Programm, das alle Zeilen mit EUR Beträgen ausgibt (Denken auch mal an grep und eine Pipe-Struktur) 31

Erweitern Sie es, damit nur die EUR Beträge ausgegeben werden (die einzelnen FEL- DER einer Zeile werden in awk durch die Variablen $1, $2,... repräsentiert) Schauen sie sich in der Man Page zu gawk (% man gawk) die String-Funktionen gsub() an und überlegen, wie Sie die EUR-Beträge in ganze Zahlen umformatieren können. Geben Sie sie zur Kontrolle wieder aus. Schließlich addieren Sie sie auf und geben das Endergebnis aus. 5. Irgendein Computer-Oldtimer überedet Sie, Ihre Bilanz in LaTeX umzuformatieren. Unter anderem müssen dazu alle Umlaute anders geschrieben werden: ä -> "a Ü -> "u ö -> "o ß -> "s Ä -> "A Ü -> "U Ö -> "O Z.B. Ötzi ißt Übel. -> "Otzi i"st "übel Schreiben Sie ein gawk Programm, das diese Übersetzung automatisch macht und testen Sie es mit Ihrer Bilanz. Tips: $0 ist die Variable, die die gesamte Input-Zeile enthält Ein doppeltes Hochkomma (") muß in einem String immer mit \ quotiert werden, z.b. "R\"ugen", damit es nicht mit dem Ende des Strings verwechselt wird. 6. Schreiben Sie ein gawk Programm, daß im Input-Text sämtliche Zahlen (nur Kardinalzahlen) in ausgeschriebene Zahlwörter umwandelt. Also z.b.: Ich esse 46 Bananen. -> Ich esse sechsundvierzig Bananen. 6.2 Lösungen 1. cat Bilanzen sed s/eur [0-9]*,/EUR XXX,/ less 2. cat Bilanzen sed s/eur *[0-9]*,/EUR XXX,/ less cat Bilanzen sed s/\(eur *\)[0-9]*,/\1XXX,/ less 3. cat Bilanzen sed s/\(eur *\)[0-9.]*,/\1EUR XXX,/ less 4. 5. Siehe File ~/WS06_07/cip1/latex.awk 6. Siehe File /share/local/lib/digit2words.awk 32