Exkurs: Unix Programme BASIEREND AUF FOLIEN VON Dr. Stefan Rapp (inspiriert von Ken Church s Vorlesung: Unix for poets ) Gertrud Faaβ Universität StuUgart, InsWtut für maschinelle Sprachverarbeitung Azenbergstr. 12, 70174 StuUgart 0711 685 81385 faaszgd@ims.uni stuugart.de 1
Unix Kurzeinführung Mal schnell Tokenisieren Wörter sorweren, zählen n gramme erzeugen suchen Immer mal wieder Shell scripts 2
Unix gawk kann bei Bedarf noch besprochen werden (eigtl. reicht perl für unsere Zwecke) 3
sich im Dateisystem zurechminden ls, cd (ls ltr ausprobieren), ~ = eigenes Heimverzeichnis (~faasz = /home/ /faasz/) pwd = wo bin ich? mkdir, rmdir cp, cp r mv rm i (alias!) echo, cat (concatenate file(s)) FilenamecompleWon: tab Taste 4
Ausgaben beschränken less oder more (seitenweise) head (die 10 ersten Zeilen ausgeben) tail (die letzten 10 Zeilen ausgeben) head 100 die ersten 100 Zeilen ausgeben tail 25 die letzten 25 Zeilen ausgeben tail +2 ab der zweiten Zeile alles ausgeben (nicht head!) 5
Achtung: Gross /Kleinschreibung Manpages = man ls NAME (Kommandoname, Kurzbeschreibung) SYNOPSIS (Syntax) DESCRIPTION (ausführliche Beschreibung) FILES (KonfiguraWonsdateien) SEE ALSO (Verweise auf verwandte Kommandos) DIAGNOSTICS (Erläuterung von Fehlermeldungen) BUGS (Bekannte Fehler und Probleme) EXAMPLE (Beispiele) 6
man pages manchmal unübersichtlich WWW! AUFGABE 1 (5 Min): Beschreiben Sie den Befehl ls ltr 7
ls ltr l Verwendung eines langen Listenformats t sorweren nach Änderungszeit r reverse, umgekehrte Reihenfolge beim SorWeren 8
Pipes Programm A Programm B Programm B verarbeitet Ausgabe von Programm A head 100 tail 25 (Zeilen 75 bis 100 ausgeben) Programm < Eingabedatai Programm > Ausgabedatei SchniUstellen: stdin Programm stdout stderr 9
Tokenisieren Aufgabe 2 (10 Minuten): was bewirkt der folgende Befehl und warum? (Eingabedatei befindet sich auf der Kursseite) tr sc 'A Za z' '\012' < Prediger3 Schlachter2000.txt 10
tr (transponieren = austauschen) s ersetze Zeichenfolgen durch ein Zeichen (squeeze repeats) c doch nicht ersetzen, sondern hinten anhängen 'A Za z' alle Strings, die dieser reguläre Ausdruck beschreibt '\012 Carriage Return < hole eine Eingabedatei Prediger3 Schlachter2000.txt Name der Eingabedatei PunktuaWon geht verloren, Satzgrenzen ebenfalls, aber gut zum Verarbeiten von Einzelwörtern 11
tr tr a z A Z (alle Klein durch Grossbuchstaben ersetzen) WICHTIG: Neue Anzahl Zeichen idenwsch mit alter Anzahl! tr xyz aaa (x, y und z werden jeweils alle durch ein a ersetzt) tr xyz a (genau diesselbe Wirkung) tr c u z (alles ausser u wird durch z ersetzt) tr d a (lösche alle a ) tr d \n (lösche alle newlines) perl s/// ist o flexibler. 12
SorWeren Sort (Auswahl!) n numeric (11 vor 2), d Lexikonordnung r reverse ( nr umgekehrt numerisch) f Klein als Grossbuchstaben behandeln k key Feldweise, t gibt den Feldseparator an u unique nur das erste von mehreren Gleichen ausgeben (lieber uniq verwenden, s.u.) +1.5 beginne beim 5. Zeichen von Feld 1 uniq unikal sorweren c eine erste Spalte einfügen, Anzahl von Gleichen ausgeben 13
Tokenisieren, SorWeren und Zählen tr sc 'A Za z' '\012' < Prediger3 Schlachter2000.txt sort n uniq c sort nr less 14
Wörter nach Flexionsendung sorweren? echo hello world rev sort Aufgabe 3 (5 Minuten): A SorWeren Sie die Wörter (types!) des Prediger3 Textes nach ihren Flexionsendungen 15
Wörter nach Flexionsendung sorweren? tr A Z a z < Prediger3 Schlachter2000.txt tr sc a z \012 sort n uniq rev sort n rev less 16
(e)grep Findet string / regulären Ausdruck Ausführliche DokumentaWon inm Web, z.b. www.gnu.org/manual/gawk/html_node/egrep Program.html grep gh (finde Zeilen mit gh) grep ^con (finde Zeilen, die mit con beginnen) grep ion$ (finde Zeilen, die mit ion au ören) grep v X (lösche Zeilen mit X) grep i ^[^aeiou]*[aeiou][^aeiou]*$ (Zeilen mit genau einem Vokal) 17
egrep Alles wie grep, UND X+ mindestens ein X X Y X oder Y wc word count l Anzahl der Zeilen feststellen Aufgabe 4 (5 Minuten): A Alle Wörter mit einer Silbe finden (ungenau ist auch ok: Ein Vokal pro Wort) B Diese Wörter zählen 18
. egrep i ^[^aeiou]*[aeiou]{1,2}[^aeiou]*$ Erweiterte Aufgabe 5 (au auend auf 3 und 4): A Wieviele Grundformen (InfiniWve) von Verben sind vorhanden und welche B Wieviele Nomen, die auf keit enden sind vorhanden und welche 19
tr a z A Z < Prediger3 Schlachter2000.txt tr sc a z \012 sort n uniq rev sort n grep 'en$' oder grep keit$ wc l oder less Probleme? Tagging! 20
Bigramme paste umgekehrtes cat Schreibt Dateiinhalte nebeneinander (normalerweise tokenisierte Dateien) Ausprobieren: tr sc 'A Za z' '\012' < Prediger3 Schlachter2000.txt > Woerterliste.txt tail +2 Woerterliste.txt > Woerterliste naechste.txt Paste Woerterliste.txt Woerterliste nachste.txt 21
Bigramme mit mehr InformaWon paste Woerterliste.txt Woerterliste nachste.txt sort uniq c sort nr head 22
Scripts: Ich merk mir, wie ich das gemacht hab! #!interpreter #!/bin/sh (default) #!/usr/local/bin/gawk #!/usr/local/bin/tcsh #!/bin/tcsh Which tcsh 23
#!/bin/sh # tokenisieren # filename : tokenise.sh tr 'A Z' 'a z tr sc 'a z' '\012 cat Prediger3 Schlachter2000.txt./tokenise less 24
#!/bin/sh # tokenisieren # filename : tokenise.sh tr 'A Z' 'a z tr sc 'a z' '\012 ## Ausführbar machen: chmod u+x tokenise.sh cat Prediger3 Schlachter2000.txt./tokenise less 25
Skripte können Variablen! $1, $2 aus der Kommandozeile $* alle Parameter, $9 letzter Parameter $# Anzahl Parameter 26
Skripte können auch interne Variablen! set foo =bar; echo $foo $foo:s/a/b/ KEINE regulären Ausdrücke $foo:as/a/b/ alle Vorkommen Schleifen: for c in 2 3 4 5 6 do echo c is $c done 27
Lösung bis 8.Mai 2009 per email an faaszgd@hdm stuugart.de): Trigramme aus Prediger3 erzeugen, absteigend nach Häufigkeit (angeben!) sorweren 28