• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]Wörterbuch bearbeiten

Conax

Hacker
Ich habe ein Wörterbuch erstellt mit allen Städten-, Gemeinden-, Flüssen-, Berge/Gebirgszüge- und Regierungsbezirke Deutschlands (dazu noch alle Länder der Erde und deren Hauptstädte) - insgesamt ca. 14.000 Einträge.

Das Wörterbuch ist schon alphabetisch sotiert und doppelte Einträge werden entfernt. Ein Problem habe ich aber noch und zwar möchte ich die Leerzeichen bzw. Tabfelder vor und nach einem Wort entfernen.

hier ein beispiel:

Code:
Aach
  Aachen
Aalen
Aarbergen  
Aasbüttel
  Abbendorf
  Abenberg
Abensberg
  Abentheuer
Abidjan
Absberg  
Abstatt
Abtsbessingen
Abtsgmünd
Abtsteinach
Abtswind
Abtweiler
Abu Dhabi
Abuja
Accra
Achberg
Achern

Kann man das irgenwie automatisch anpassen das es die unnötigen Leerzeichen und Tabfelder löscht?
 

framp

Moderator
Teammitglied
Probier mal
Code:
cat Datei | perl -n -e 's/^\s+//; s/\s+$//; print "$_\n";'
 
OP
C

Conax

Hacker
Vielen Dank für den Tipp - funktioniert einwandfrei!!!

musste aber den code ein wenig anpassen
Code:
cat woerterbuch.txt | perl -n -e 's/^\s+//; s/\s+$//; print "$_\n";' | sort -o testest.txt

dann habe ich die änderungen in der testtest.txt datei
 

framp

Moderator
Teammitglied
Conax schrieb:
... Nur sollte es das natürlich in der "Datei" berichtigen.
Dazu gibt es den > Operator zum Umlenken der Ausgabe in eine Datei. Bei Dir also
Code:
perl -n -e 's/^\s+//; s/\s+$//; print "$_\n";' OriginalDatei > NeueDatei
Ich würde immer nicht direkt die Originaldatei ändern sondern das Ergebnis in einer neuen Datei schreiben. Wenn das Programm vielleicht doch Mist macht ist das Original mit den 14000 Zeilen u.U. unbrauchbar :roll:
 

framp

Moderator
Teammitglied
Conax schrieb:
Vielen Dank für den Tipp - funktioniert einwandfrei!!!

musste aber den code ein wenig anpassen
Code:
cat woerterbuch.txt | perl -n -e 's/^\s+//; s/\s+$//; print "$_\n";' | sort -o testest.txt

dann habe ich die änderungen in der testtest.txt datei
Wenn es schon sortiert ist brauchst Du nur den > Operator benutzen. Geht schneller als nochmal alles durch sort zu jagen. Aber scheint bei Dir ja trotzdem schnell gegangen zu sein.
 
OP
C

Conax

Hacker
Ich bin fast fertig mit meinem geographie Wörterbuch. Etwas nervt mich allerdings noch und zwar habe ich oft Einträge wie z.B. Mühlhausen (Franken).

Gibt es da auch einen Befehl das es alles was in Klammern steht entfernt (inklusive der Klammern natürlich). Das also "(Franken)" wegfällt und nur noch Mühlhausen dort steht?
 

framp

Moderator
Teammitglied
Code:
perl -n -e 's/\(.+\)//; print "$_\n";' OriginalDatei > NeueDatei
sollte es tun (ungetestet !)
 
OP
C

Conax

Hacker
ja die Klammern sind weg aber er hat überall Absätze reingehauen.

sieht jetzt so aus:

Aabachsee

Aach

Aachen

Aalen

Aalkistensee

Aalsee

Aarbergen

Aartalsperre

Aasbüttel

Aasee

Abbendorf
......
 

framp

Moderator
Teammitglied
:eek:ps: Das hatte ich letzte Nacht übersehen. Robis Fix funktioniert natürlich. Noch einfacher geht es mit
Code:
perl -p -e 's/\(.+\)//' OriginalDatei > NeueDatei
 

framp

Moderator
Teammitglied
Oder eben ganz ohne Perl nur mit sed:
Code:
cat originalDtaie | sed -e 's/^[[:space:]]\+//' | sed -e 's/[[:space:]]\+$//' | sed -e 's/(.*)//' > NeueDatei
@Conax: Google einfach nach sed und regulären Ausdrucken. Das sind die beiden Handwerkszeuge die hier ausreichen um Deine Texte zu manipulieren. Es lohnt sich sich damit mal vertaut zu machen. Kann man immer mal gebrauchen, denn Textmanipulationen benötigt man immer wieder.
z.B. http://lnx.fontysvenlo.org/IntroSED_Linux.pdf ist eine ganz nette Übersicht und Einführung.
 

abgdf

Guru
Ist aber schon ziemliches Gehacke.
Ich würde mir ein saubereres Skript schreiben, bei dem ich mehr Kontrolle über Eingabe und Ausgabe hätte.
Aber ich steh' ja auch auf Skriptsprachen (Perl, Python) ...
 

framp

Moderator
Teammitglied
abgdf schrieb:
Ist aber schon ziemliches Gehacke.
Ich würde mir ein saubereres Skript schreiben, bei dem ich mehr Kontrolle über Eingabe und Ausgabe hätte.
Aber ich steh' ja auch auf Skriptsprachen (Perl, Python) ...
Ich muss gestehen ich sehe es genauso wie Du. Aber bei einfachen Textfiltern - und für mich ist das hier ein Beispiel dafür - ist der Einsatz von sed schon der richtige Weg. Ein Programm ist da einfach die Kanone für den Spatzen ;) . Ist doch ein Basisprinzip von Linux/Unix: Erledige ein komplexes Problem durch den Einsatz einer Kombination von einfachen effizienten Tools. Und die Primäraufgabe von sed ist Texte zu ändern - und das macht es sehr effizient.

Vor allen Dingen hat diese Methode den Vorteil, dass man nicht programmieren können muss. Einfach die TextbearbeitungsBefehle, die man kennt per | hintereinanderschalten und fertig ist. Nützliche Tools zur Textbearbeitung sind z.B. cut, join, sed, sort, tr und uniq. Damit kann man ohne Programmierkenntnisse schon sehr viel erreichen :roll:
 
OP
C

Conax

Hacker
Ja der letzte Befehl hat auch funktioniert. Jetzt ist es vorerst für den Bereich Geographie perfekt. Bin auch erstaunt das diese paar Befehle das ganze so erleichtern (dürfte auch in Zukunft in anderen Bereichen nützlich sein). Unter Windows gibts da extra ne Software die arbeitet aber bei weitem nicht so gut von der Effizienz mal ganz abgesehen.

Danke nochmal für eure Hilfe
 

leanUX

Member
Es gibt aber für Windows wenigstens Ports von diesen Linux-Tools.
http://unxutils.sourceforge.net/
Damit kann man sich auch gut behelfen, wenn die zu bearbeitenden Dateien originär unter Windows beheimatet sind.
( Aber besser ist es natürlich gleich alles unter LINUX zu bearbeiten ;) )

Grüße
 

framp

Moderator
Teammitglied
leanUX schrieb:
Es gibt aber für Windows wenigstens Ports von diesen Linux-Tools.
Ich habe bei mir cygwin auf meinem XP Hobel installiert. Dann noch die Pfade richtig setzt und in der WIndowsCommandLine können auch die liebgewordenen Linux Befehle ausführt werden ;)
 

abgdf

Guru
Hehe, man kann dann noch "vim für Windows" installieren, Perl sowieso und auch sowas wie audacity und mplayer und die LaTeX-Distribution MiKTeX. Ja, man kann Windows schon ganz schön "verlinuxen". Am Ende merkt man dann kaum noch, daß man nicht unter Linux arbeitet. Leider kenne ich aber keinen guten Ersatz für die sog. "MS-DOS-Eingabeaufforderung": xterm für Windows, das fehlte mir noch ...

Ansonsten kann man auch schnellmal ein Puppy Linux starten (mit dieser kleinen Distribution beschäftige ich mich gerade ein bißchen, die ist richtig gut!).

Gruß
 

framp

Moderator
Teammitglied
abgdf schrieb:
Hehe, man kann dann noch "vim für Windows" installieren, Perl sowieso und auch sowas wie audacity und mplayer und die LaTeX-Distribution MiKTeX. Ja, man kann Windows schon ganz schön "verlinuxen". Am Ende merkt man dann kaum noch, daß man nicht unter Linux arbeitet. Leider kenne ich aber keinen guten Ersatz für die sog. "MS-DOS-Eingabeaufforderung": xterm für Windows, das fehlte mir noch ...
Das alles ist im cygwin drin :roll:
 
Oben