Unix-Tools für Korpusbearbeitung

Transcrição

Unix-Tools für Korpusbearbeitung
Unix-Tools für Korpusbearbeitung
SS2006 Nagel & Lee
1
Unix-Befehle zusammengefaßt
Hilfe zu Unix-Befehle
$man <Befehl> % zeigt Infos zum betreffenden Unix-Befehl
Beispiele:
$man sort
$man man
$info <Befehl> % zeigt Infos ausfhrlich zum betreffenden Unix-Befehl
Beispiele:
$info sort
$info grep
Option -k $man -k <Stichwort> % zeigt manpages zum betreffenden ‘Stichwort’
Beispiele:
$man -k sort
$man -k edit
Unix-Befehle: Übersicht
Befehl
cd
pwd
mkdir
ls
rmdir
cat
tac
rev
>
<
>>
less
more
head
tail
|
cp
rm
mv
chmod
Bedeutung
change directory
display the present working directory
make directory
list the contents of a directory
remove directory
show the contents of a file
show the contents of a file reversely
show the contents of a file reversely
redirect the standard output to the file
read from the file
append the standard output to the file
display a file, one screen at a time
display a file, one screen at a time
display the first n lines from the file
display the last n lines from the file
pipe
copy the file to the directory or file
remove the file
move the file to the directory or file
change the access mode
1
Beispiel
$cd ..
$pwd
$mkdir korpus
$ls -l korpus
$rmdir korpus
$cat datei.txt
$tac datei.txt
$cat datei.txt | rev
$cat datei.txt > datei2.txt
$cat < datei2.txt
$cat datei.txt >> datei2.txt
$less datei.txt
$more datei.txt
$head -10 datei.txt
$tail -10 datei.txt
$cat datei.txt | less
$cp datei.txt datei3.txt
$rm datei3.txt
$mv datei.txt korpus
$chmod 755 datei.txt
wc
tr
sort
uniq
cut
paste
zip
unzip
gzip
gunzip
tar
grep
ptx
comm
diff
find
2
count the words of the file
substitute the characters
sort the contents of the file
delete the repeated lines
cut the selected fields
paste lines from files sequentially in columns
compress the file
decompress the file
gnu zip version
gnu unzip version
summarize several files into the one archive file
search a file for the a pattern
produce a permuted index of file contents
find lines that are common, and lines that are unique
find differences between two files
find name in the file from the start directory
$wc datei.txt
$tr “a” “x” <datei.txt | less
$sort -u datei.txt
$sort datei.txt | uniq
$cut -f2 datei.txt
$paste Datei1 Datei2
$zip zipdatei datei.txt
$unzip zipdatei.zip
$gzip datei.txt
$gunzip datei.gz
$tar -cvzf datei.tgz datei1 datei2
$grep “name” datei.txt | less
ptx -w 80 -o suchwoerter datei
comm Datei1 Datei2
diff fromdatei.txt todatei.txt
$find . -name datei.txt
Unixtools für Korpusbearbeitung
tr Der tr-Befehl ersetzt einzelne Zeichen durch andere, oder löscht einzelne Zeichen.
tr arbeitet als Filter, das heißt, dass Daten von der Standardeingabe gelesen wird, und Ergebnis zur
Standardausgabe wiedergegeben wird. Der Gebrauch von tr wird mit Eingabe- und Ausgabeumlenkung (redirect) erfolgen, oder innerhalb einer Pipe.
Syntax: $tr [Optionen] [Zeichenkette1 [Zeichenkette2]]
Nützliche Optionen:
-c Veranlaßt die Verwendung des Komplements von Zeichenkette1
-d Löscht alle Zeichen aus Zeichenkette1 aus dem Eingabestrom
-s Ignoriert wiederholt auftretende Zeichen in Zeichenkette2
-t Verkürzt Zeichenkette1 vor dem Transliteration auf die Länge von Zeichenkette2
Sonderzeichen:
\a Glocke
\b Backspace
\f Seitenvorschub
\n Zeilenwechsel
\r Waagenrücklauf
\t Tabulator
\v vertikaler Tabulator
\nnn Zeichen mit dem Oktalwert nnn
\\ Backslash-Zeichen
Zeichenklassen:
2
Zeichen1-Zeichen2
[Zeichen1-Zeichen2]
[:alnum:]
[:alpha:]
[:blank:]
[:cntrl:]
[:digit:]
[:graph:]
[:lower:]
[:print:]
[:punct:]
[:space:]
[:upper:]
[:xdigit:]
[Zeichen]
Alle Zeichen im Bereich von Zeichen1 bis Zeichen2
Gleich wie Zeichen1-Zeichen2
Buchstaben und Zahlen
Buchstaben
Leerraum
Steuerzeichen
Ziffern
druckbare Zeichen außer Leerzeichen
Kleinbuchstaben
druckbare Zeichen
Interpunktion
Leerraum(horizontal oder vertikal)
Großbuchstaben
hexadezimale Ziffern
Zeichen in Zeichenkette2 auf die Länge von Zeichenkette1 vervielfachen
Beispile:
$tr ’a’ ’x’ < sz.txt | less
Alle Vorkommen von ’a’ in der Datei sz.txt werden durch ein ’x’ ersetzt.
$tr ’abc’ ’xyz’ < sz.txt | less
Alle Vorkommen von ’a’ werden durch ein ’x’ ersetzt, die von ’b’ durch ein ’y’, und die von ’c’ durch
ein ’z’.
Falls die Zeichenkette2 kürzer als Zeichenkette1 ist, wird sie intern mit dem letzten Zeichen aus
Zeichenkette2 aufgefüllt, bis sie die Länge der Zeichenkette1 hat.
$tr ’abc’ ’x’ < sz.txt | less
Alle Vorkommen von ’a’, ’b’ oder ’c’ werden durch ein ’x’ ersetzt.
$tr -d ’\000’
Entfernt alle Nullbytes
$tr -cs ’[:alnum:]’ ’\n’
Konvertiert alle nicht-alphanumerische Zeichen zum Newlinezeichen, und die wiederholten Newlinezeichen zum einzigen Newlinezeichen. Vorsicht: Zeichenklasse [:alpha:] ist von der Einstellung locale
abhängig, während die [A-Za-z] nur das englische Alphabet einschließt.
Das folgende Beispiel gibt die Liste der doppelt aufeinanderfolgenden Wörter aus:
$cat sz.txt | tr -s ’[:punct:][:blank:]’ ’\n’ | tr ’[:upper:]’ ’[:lower:]’ | uniq -d
Zuerst werden alle Interpunktionen und Leerzeichen ins Newlinezeichen ersetzt, alle Großbuchstaben
in die Kleinbuchstaben, und danach werden nur die doppelt aufeinanderfolgenden Zeile durch -d
Option von uniq ausgegeben.
3
sort Sortiert die Zeilen der angegebenen Dateien. Oder vergleicht bestimmte Felder jeweils zweier
Zeilen und sortiert danach.
Syntax: $sort [Optionen] [Dateien]
Nützliche Optionen:
-b Führende Leerzeichen und Tabs werden ignoriert
-c Überprüft, ob die Dateien bereits sortiert sind
-d Sortiert in lexikalischer Ordnung
-f Ignoriert Groß-/Kleinschreibung
-m Fügt mehrere bereits sortierte Dateien zusammen
-n Sortiert in arithmetischer Ordnung
-r Sortiert in umgekehrter Ordnung
-t<sep> Trennt die Zeile an dem angegebenen Zeichen in Felder auf
-u Ersetzt mehrere identische Zeilen durch eine einzige Zeile
-k POS1,POS2 Sortierschlüssel sind die Felder POS1 bis POS2, jeweils inklusive
Beispiele:
$sort -fd wortliste | uniq -c
Sortiert eine Wortliste in lexikalischer Ordnung, und dann durch uniq -c entfernt Duplikate und gibt
die Häufigkeit der einzlenen Wörter aus.
$sort -n -t: -k3,3 /etc/passwd
Sortiert die Paßwortdatei in numerischer Ordnung anhand des dritten Feldes.
Das folgende Programm gibt die Wortliste nach Frequenz sortiert aus:
$cat sz.txt | tr -cd ’A-Za-z0-9 \012’ | tr -s ’ ’ ’\012’ | sort | uniq -c | sort -nr | less
Zuerst werden alle außer alphanumerischen, Leer- und Newlinezeichen gelöscht, und danach werden
alle Leerzeichen durch -s Option zum Newlinezeichen gewandelt. Sortiert mit Anzahl, und dann
numerisch umgekehrt ausgegeben.
uniq Der uniq-Befehl entfernt doppelte, aufeinanderfolgende Zeilen. Der Befehl wird häufig als Filter benutzt.
Syntax: $uniq [Optionen] Datei1
Nützliche Optionen:
-c Gibt jede Zeile mit der Anzahl ihres Auftretens aus
-d Gibt nur die doppelt vorkommenden Zeilen aus
-i Groß-/Kleinschreibung ignorieren
-u Gibt nur die nicht doppelt vorkommenden Zeile aus
4
Token, Type und Frequenliste Bislang haben wir Frequenzliste unbekümmert absteigend sortiert.
Dahinter steckt die Annahme, dass die ungewichtete Wrter(man kann diese Liste als Stopwrter
nennen, in dem Sinne, dass sie nicht als Key-Word gezählt werden können) sehr hohe Frequenz
aufweisen werden. Diese Frequenzliste wurde bei vielen Anwendungen wie Information Retrieval
oder Dokument-Clustering angewendet werden. Zipfsches Gesetz oder Poissonwert ist auch eine
Beobachtung von dieser Statistik.
Während es sich beim Typ um die abstrakte Form handelt, wird jede Realisierung von diesem Typ
als Token genannt. So ist ein Fahrzeug ein Typ, worunter jedes realisierte Auto fällt. Ein Grundform
vom Verb ist z.B. auch ein Typ, whrend jede realisierte konjugierte Form ein Token ist. In unserer
naiven Frequenzliste handelt sich doch nur um die Realisierung von der gleichen Form.
Reguläre Ausdrücke und grep Regulärer Ausdruck ist ein Pattern, der eine Menge von Zeichenketten beschreibt. Er ist sehr hilfreich beim Suchen nach einer Zeichenkette mit dem Befehl
grep. grep versteht zwei Art reguläre Ausdrücke; grundlegende und erweiterte reguläre Ausdrücke.
Zeichenklasse wird zwischen [ und ] angegeben. Falls ˆ am Anfang der Zeichenklasse in ekigen Klammer steht, matcht dieser Ausdruck alles außer dieser Klasse. Es gibt vordefinierte Zeichenklasse. So
ist [:alnum:] für alphanumerische Klasse: Diese Klasse in ekigen Klammer - [[:alnum:]] - drückt dieselbe Klasse wie [0-9A-Za-z]. Für weitere vordefinierte Klasse, s. $man grep und oben bei dem Befehl tr.
Der Punkt . matcht irgendein Zeichen. Symbol \w ist gleich wie [[:alnum:]], während \W [ˆ[:alnum:]]
ist.
ˆ und $ matchen jeweils Zeilenanfang und -ende.
Regulärem Ausdruck kann ein Iterator folgen:
? das vorhergehende Zeichen kann, muss aber nicht vorkommen
+ das vorhergehende Zeichen muss mindestens ein mal vorkommen
∗ das vorhergehende Zeichen muss nicht vorkommen, darf aber beliebig oft vorkommen
{n} das vorhergehende Zeichen muss genau n-mal vorkommen
{n,} das vorhergehende Zeichen muss mindestens n-mal vorkommen
{n,m} das vorhergehende Zeichen muss mindestens n-mal, darf aber nicht mehr als m-mal vorkommen
Andere Metazeichen bei Suchmustern:
\ Abschalten der Sonderbedeutung des folgenden Metazeichen
\n Setzt den im n-ten \( \) passenden Text wieder ein
\< \> Paßt auf Wortanfang(\<) oder Wortende(\>)
| Paßt auf den vor oder nach dem Strich angegebenen Ausdruck
( ) Gruppierung
Suchmuster muß in entweder doppelten oder einfachen Anführungszeichen eingeschlossen sein. Sicherer sind die einfachen Anführungszeichen.
grep versteht die grundlegenden und erweiterten regulären Ausdrücke: So verstehen die vorderen
keine Metazeichen wie ?, +, {, |, (, und ). Stattdessen müssen sie durch Voranstellung des \ Zeichens
geschützt werden. Traditionelle egrep unterstützt keine Metazeichen { und}.
5
egrep: erweiterte grep.
Spezialoption ’-o’ von egrep gibt nur die betreffende aus. $egrep -o ’backslashw+’ DATEI gibt zum
Beispiel nur die Wortfolge aus.
Nützliche Optionen beim Suchen:
-c Gibt nur die Anzahl der Trefferzeilen aus
-e Muster Sucht nach Muster. Funktioniert gleich wie ohne Option, aber schützt Muster
-f Datei Liest eine Liste von Suchmustern aus Datei(je eines pro -Zeile)
-i Gleichbehandlung von Groß- und Kleinschreibung
-l Gibt zusätzlich den Namen der Datei mit dem Treffern aus
-n Gibt die Zeile und ihre Zeilennummer aus
-r Liest alle Dateien eines Verzeichnisses rekursiv
-v Gibt nichtgematchte Zeile aus
-w Sucht nur nach dem ganzen Wort
Beispiele:
Wort
ˆWort
Wort$
ˆWort$
[Ww]ort
W[aeiou]rt
W.rt
ˆ...$
hallo\>
0\{5,\}
[0-9]\{3\}
die Zeichenfolge Wort
Wort am Amfang einer Zeile
Wort am Ende einer Zeile
Wort ist der einziger Text auf der Zeile
Wort oder wort
Der Zweite Buchstabe ist ein Vokal
Das Zweite Zeichen ist ein beliebiges Zeichen außer Zeilenvorschub
jede Zeile, die genau drei Zeichen(3x8Byte) enthält
Sucht nach dem Wort, das mit hallo endet
fünf oder mehr Nullen hintereinander
Drei-stellige Zahl
Das folgende sucht nach dem Palindrom mit dem 5 Buchstaben:
grep -e ’ˆ\(.\)\(.\).\2\1$’ Datei
oder
egrep -e ˆ(.)(.).\2\1$ Datei
agrep
sgrep
diff Vergleicht zwei Textdateien. diff gibt diejenigen Zeilen aus, in denen sich Datei1 und Datei2
unterscheiden. Standardmäßig werden Zeilen aus Datei1 durch ein< markiert und solche aus Datei2
mit >. Falls die beiden Verzeichnisse vergliechen werden, arbeitet diff mit den gleichen Dateinamen.
6
Syntax: $diff [Optionen] Datei1 Datei2
Nützliche Optionen:
-b Behandelt wiederholte Leerzeichen wie eins und ignoriert Leerzeichen an Zeilenenden
-B Ignoriert Leerzeilen
-E Ignoriert den Unterschied zwischen TAB und Leerzeichen
-w Ignoriert alle Leerzeichen
-i Ignoriert Groß- und Kleinschreibung
-I regexp Ignoriert Zeilen, die dem regulären Ausdruck regexp entsprechen
-q Es wird nur ausgegeben, ob sich die Dateien untrscheiden
-C n Gibt die n Zeilen um die Zeile, in der der Unterschied auftritt, aus
-c Gibt die Zeile in einem Kontext von 3 Zeilen aus
-U n Gleich wie -C Option, aber noch kompakter
-u Gleich wie -c Option, aber noch kompakter
-y Erzeugt zweispaltige Ausgabe
-r Vergelicht Untervezeichnisse rekursiv
Beispiele:
$diff -y sz.txt sz 1.txt | less
$diff -c sz.txt sz 1.txt | less
diff verfügt über viel mehr Funktionen als hier beschrieben. Für die genauere Beschreibung, s. man
diff oder info diff
diff3 vergleicht drei Dateien und gibt die Unterschiede aus.
find Um eine Gruppe von Dateien nach verschiedenen Kriterien zusammenzustellen wird oft der
Befehl find genutzt.find durchsucht vom angegebenen Verzeichnis aus abwärts, um Dateien zu finden,
die den angegebenen Kriterien entsprechen. Als besonders nützlich Bedingungen sind vorab erwähnt:
Syntax: $find [Pfadname] [Bedingungen]
Nützliche Bedingungen:
-name Muster Sucht nach Dateien, deren Namen mit dem Muster übereinstimmen
-links n Sucht Dateien, die n Links haben
-atime n Findet Dateien, die vor genau n Tagen gelesen wurden
-newer Datei Findet Dateien, die später als Datei modifiziert wurden
-group gname Sucht Dateien, die zu der mit gname bezeichneten Gruppe gehören
-print Gibt die gefundenen Dateien und Verzeichnisse mit ihren kompletten Pfadnamen aus
-size n Sucht Dateien, die n Blöcke enthalten
-type c Sucht Dateien vom Typ c
-maxdepth n Beschränkt die Tiefe der Suche auf die angegebene n von Verzeichnisebenen
Beispiele:
7
$find ../ -name ’*.perl’
$find $HOME -links 5
$gzip ‘find . \! -name ’*.gz’ -print‘
Das Programm findet und komprimiert Dateien, deren Namen nicht mit .gz enden.
$find . -name ’kt[0-9]’
Das Programm findet Dateien wie kt1, kt2,...
UTF-8 und Locale
- 4 Byte
UTF-8 ist kompatibel mit ASCII und ISO-8859-1, und Variabel an Lnge von 1
Locale Locale beeinflußt die sort und grep.
Aufruf
$ locale für eingestellte locale
$ locale -a für alle locales
locale setzen
locale wird wie folgt gesetzt
LANG=”WERT” für globale Einstellung
LC ***=”WERT” für einzele Einstellung
export LC ***=”WERT” für dauerhafte Einstellung
für sh, ksh, bash, zsh
setenv für csh, tsch
LC ***=”WERT” PROGRAMM für das betreffende Programm
locale Umgebungsvariable
LANG zuständig
LC CTYPE zuständig
LC COLLATE zuständig
LC NUMERIC zuständig
LC TIME zuständig
LC MONETARY zuständig
LC MESSAGES zuständig
LC ALL zuständig
für
für
für
für
für
für
für
für
die lokale Kategorie der Sprache
die Zeichenklassen und Klein- und Großkonvertierung
Collation
das lokale nummerische Format
die lokale Zeit- und Datumsformat
die lokale Kategorie des Banknoten-relevanten nummerischen Formats
positive und negative Nachrichten
alle lokale Katogorien
Konvertierung zwischen Kodierungen
iconv geschrieben von Ulrich Drepper
Aufruf mit Option
$ man iconv
8
$ iconv -l gibt alle Zeichensätze aus
$ iconv -f iso-8859-1 -t utf-8 -o file.utf8 file.iso
recode geschrieben von Franc, ois Pinard
Nützliche Optionen
$ man recode
$ info recode
$ recode -l
gibt alle Zeichensätze aus
$ recode -l KODIERUNG gibt den betreffenden Zeichensatztabelle aus
$ recode -lf KODIERUNG gibt den betreffenden Zeichensatz mit dem Zahlenwert und Namen aus
$ recode -f l1..u8 DATEI
zwingt die Konvertierung
recode zwischen Betriebssystemen
recode mac
recode mac..l1
recode mac..Latin-1
recode mac/CR..Latin-1
recode macintosh..ISO 8859-1
recode macintosh/CR..ISO 8859-1
file entscheidet den Dateityp
Nützliche Optionen
$ file -i DATEI
Mime Type Ausgabe des Dateityps
$ file -z Zip DATEI liest die gezippte Datei und gibt Dateityp aus
Konkordanz erstellen
ptx ptx arbeitet mit Latin1
Optionen
-f
Klein- Groschreibung ignorieren
-i
Wörter in der Datei ausgeschlossen
-o
Nur Wörter in der Datei
-W Wort RE
-A Auto-Referenz
-w Breite bestimmen
-g
Zahl der Leerzeichen
-T Tex-Format
Beispiel
ptx -f -A -w 120 -W ’noch’ | less
grep –colour=always Optionen
-A n Kontext nach dem Matchen
-B n Kontext vor dem Matchen
-C n Kontext vor und nach dem Matchen
9
Beispiel
egrep -i -n –colour=always ’noch’ | less -R
cut Schneidet bestimmte Spalten oder Felder aus den angegebenen Dateien aus. Bei den folgenden
Optionen wird als Liste eine Folge von ganzzahligen Wert akzeptiert. Einzelne Werte werden durch
Kommata voneinander getrennt, Bereiche können durch einen Bindestrich angegeben werden.
Syntax: cut [Optionen] [Dateien]
Nützliche Optionen:
-b Byte-Liste Legt eine Liste von Byte-Positionen fest
-c Zeichen-Liste Legt Zeichen in Position aus der Zeichen-Liste fest
-dc Wird zusammen mit -f benutzt, um den Feldtrenner c festzulegen
-f Liste Gibt die in der Liste festgelegte Felder aus
-n Multi-Byte-Zeichen nicht trennen
Default Delimiter ist der Tabulator.
Beispiele:
$cut -d: -f1,5 /etc/passwd
Extrahiert Benutzernamen und tatsächliche Namen aus der Datei /etc/passwd. Als Delimiter wurde
der Doppelpunkt ausgenutzt.
Das folgende Programm gibt die Wortliste aus den Feldern 2 bis Ende jeder Zeile nach der Eingabereihe unsortiert aus:
$cat sz.txt | tr ’[:punct:]’ ’\012’ | tr -s ’\n’ | tr -s ’ ’ | tr ’ ’ ’\t’ | sed ’s/ˆ *//g’ | sed ’s/$/ /’ | tr ’ ’
’\t’ | cut -f 2- | tr ’\t’ ’\’n’ | less
Zuerst werden alle Interpunktionen durch ein Newlinezeichen ersetzt. Durch Option -s werden alle
mehrfache Newline- und Leerzeichen zu einem einzigen Newline- und Leerzeichen gewandelt. Mit der
Stream-Editor sed werden alle beginnenden Leerzeichen gelöscht, und am Ende ein Leerzeichen extra
hinzugefügt, um ein Feld erweitern zu können. Danach wird jedes Leerzeichen durch ein Tabulator
ersetzt, um den Default-cut-Befehl nutzen zu können. Beim cut-Befehl werden alle Felder außer
dem 1. Feld extrahiert. Jedes Wort wird zeilenweise ausgegeben mit einer Extra-Leerzeile aus dem
Originaltext.
paste Fügt die Zeile von zwei oder mehreren Dateien, getrennt durch einen Delimiter (Default ist
der Tabulator), in Spalten zusammen.
Syntax: paste [Optionen] [Dateien]
Nützliche Optionen:
10
-dZeichen
-s
Ersetzt einen Dateinamen durch die Standardeingabe
Trennt die Spalten mit Zeichen anstelle eines Tabulators.
Fügt fortlaufende Zeilen zu einer Datei zusammen
Beispiele:
$paste x y z > Datei
Erzeugt eine dreispaltige Datei aus den Datei x,y und z.
tail gibt die Zeilen, gezhlt vom Dateiende, aus.
Syntax: tail [Option] [Datei]
Beispil:
$tail -10 DATEI
gibt die die letzte 10 Zeile aus.
tail kann aber auch die Zeile, gezhlt vom Dateibeginn, aus. In diesem Fall wird die Option + statt verwendet.
Beispiel:
$tail +2 DATEI
gibt die ganze Datei ab 2. Zeile aus.
Stream Editor Es kommt oft vor, dass man die Datei editieren muss. Die folgende Scriptsprachen
sind fürs Texteditieren sehr gut geeignet. Sie können sowohl Dateien oder durch | übertragene STDIN
bearbeiten.
sed ist meist fr den PatternMatching und die Substitution eingesetzt.
Syntax: sed [Option] [Datei]
Optionen:
-e script
-f script-file
-r extended RE
Beispiel:
$cat sz.txt | sed -e ’s/a/b/g’
ersetzt alle a’s durch b’s.
11
perl ist eine beliebte StreamEditor wie sed, arbeitet zeilenweise.
Syntax: perl -ne script DATEI
Syntax: perl -pe script := perl -ne script + print
Beispiel:
$cat sz.txt | perl -pe ’s/a/b/g’
gleich wie sed-Beispiel
awk ist auch PatternProcessing StreamEditor.
Syntax: awk [Option] [Datei]
Standard-Optionen:
-Ffs: Feldtrenner
-v var=value: Wertzuweisung
awk ist besonders geeignet für die Feld getrennte DATEI.
Beispiel:
$awk -F: ’print $1; print $2; print $3’ /etc/passwd
gibt die 1., 2. und 3. Felder aus der Datei /etc/passwd aus. $0 bedeutet bei awk die ganze Zeile.
ngramme erstellen Ngramme sind für viele Korpus-orientierte Linguisten sehr sinnvoll ausgenutzt:
für die Kollokationen oder Mehrwortlexeme. Direkt aus dem Text kann man sie am einfachsten mit
StreamProzessor awk erstellen. Aus der tokenisierten Liste kann man am einfachsten mithilfe von
tail und paste erstellen.
Beispiel aus dem Text: (Bigramme)
$cat sz.txt | tr -s ’[:punct:]’ ’ ’ | awk -F’ ’ ’for($i=0;$i<NF;$i++)print $i, ($i+1)’
Beispiel aus zwei identisch tokenisierten vertikalen Dateien aus einem Text: (Bigramme)
$paste -d 9977.tok ¡(tail +2 9977.tok)
3
flex
flex ist ein Tool für schnelle Generierung von Scanner, der die lexikalischen Patterns im Text erkennt.
flex kann entweder aus einer Datei oder von der Standardeingabe lesen. Das Tool nimmt als Input
die reguläre Ausdruck und die Regel auf, und generiert als Alsgabe die C Quellkode. Weil flex aus
Regulären Ausdrücke einen deterministischen Automaten erstellt, ist es sehr schnell.
12
Format von Inputdatei flex Inputdatei hat 3 durch %% getrennte Teile. Davon sind die Definitionsund UserCodeteil optional.
defintion
%%
rules
%%
user code
Definitionteil hat zwei Teile:
name defintion
Beispiel:
DIGIT
ID
ZAHL
[0-9]
[a-z][a-z0-9]
{DIGIT}+
Regelteil hat auch 2 Teile:
pattern
action
Beispiel:
DIGIT
ID
{ECHO;}
{ECHO; printf(ID);}
UserCode ist ein C main() Programm, auf das wird verzichtet.
Wenn man die Eingabedatei fr die Generierung von C Quellkode geschrieben hat, muss man sie mit
der Erweiterung .l speichern und durch den Befehl im SHELL:
$flex -oeingabedatei.c eingabedatei.l
in C Code umgewandeln. Danach muss sie wie normale C Code mit C-Compiler kompliert werden.
Dabei muss auch die flex-Bibliothek eingebunden werden.
$gcc -oeingabedatei eingabedatei.c -lfl
Dann ist sie anwendungsbereit:
13
Ausführen von Programm ’eingabedatei’ auf eine Textdatei:
$cat DATEI | ./eingabedatei
Reguläre Ausdrücke Patterns sind die erweiterten regulären Ausdrücke. Quantoren sind gierig.
Kennt Zeichenklasse(s. oben) und Look-Ahead Operator(’/’), aber nicht utf-8 fähig. Input wird
Reihen nach gematcht
’x’
’.’
’[xyz]’
’[a-z]’
’[â-z]’
’r*’
’r+’
’r?’
’r|s’
’r/s’
’r̂’
’r$’
matcht ein ’x’
matcht irgendein Zeichen ausser Newline
Zeichenklasse: entweder x, y, oder z
Zeichenklassen-Bereich: ein Zeichen aus dem Bereich a bis z
Negative Zeichenklasse: ein Zeichen ausser a bis z
zero oder mehr ’r’, wobei ’r’ irgendein regulärer Ausdruck ist
ein oder mehr ’r’, wobei ’r’ irgendein regulärer Ausdruck ist
zero oder ein ’r’
entweder ’r’ oder ’s’
ein ’r’, aber gefolgt von ’s’
’r’ am Anfang der Zeile
’r’ am Ende der Zeile
action Jedes Pattern hat eine entsprechende Aktion, die eine beliebige C Statement sein kann. Das
Pattern endet beim ersten nicht-escaped Leerzeichen; die Reste der Zeile sind Aktion fürs Pattern.
Es kann auch /* C-Kommentar*/ eingebettet sein.
Spezial Anweisung bei Aktion:
’ECHO’ kopiert yytext(gematchte Texte) auf die Scanner-Ausgabe: Wiederausgabe des Textes
14

Documentos relacionados