Hallo,
ich muss in einer grossen (Text-)Datenbank-Datei einige Einträge raussuchen. Die Datei hat ungefair folgenden Aufbau:
....<Kennung> ...<Nummer> ...<Relevanter Text> ... ... <Ende>
Ab einer bestimmten <Kennung>, kommt in der nächsten Zeile eine <Nummer>, die ich weiss, und nach der ich suchen möchte. Zu dieser <Nummer> möchte ich mir den <relevanten Text> mit anzeigen lassen. Der geht bis zum <Ende>.
Ich hab schon mit verschiedenen Sachen wie grep und sed rumgespielt. Aber so besonders kenn ich mich da halt nicht aus. grep geht denk ich nicht, da es nur auf einer Zeile immer sucht. Ich würde es irgendwie mit sed machen, nur bekomm ich das mit dem regulären Ausdruck nicht hin.
Kann mir jemand helfen?
Dankeschön,
Friedrich
besonders kenn ich mich da halt nicht aus. grep geht denk ich nicht, da es nur auf einer Zeile immer sucht. Ich würde es irgendwie mit sed machen, nur
Nein, mit -A <num> zeigt grep <num> Zeilen nach einem Treffer mit an. Vielleicht kannst/solltest Du damit Deine Datei erst einmal handlich zerlegen.
... nur so als Idee.
Andreas
Am 19. Februar 2003 schrieb Friedrich Hagedorn:
....<Kennung> ...<Nummer> ...<Relevanter Text> ... ...
<Ende>
Etwa sowas:
perl -ne 'print if /Kennung/../Ende/ and /Nummer/' dateiname
?
Torsten
On Wed, Feb 19, 2003 at 12:01:21PM +0100, Friedrich Hagedorn wrote:
Hallo,
ich muss in einer grossen (Text-)Datenbank-Datei einige Einträge raussuchen. Die Datei hat ungefair folgenden Aufbau:
[cut]
Ich hab schon mit verschiedenen Sachen wie grep und sed rumgespielt. Aber so besonders kenn ich mich da halt nicht aus. grep geht denk ich nicht, da es nur auf einer Zeile immer sucht. Ich würde es irgendwie mit sed machen, nur bekomm ich das mit dem regulären Ausdruck nicht hin.
Prima, endlich kann ich mal wieder Werbung für Python machen! Sicherlich lässt sich das auch mit sed lösen, doch das wird sicherlich kryptisch und es gibt außerdem verschiedene sed Implementierungen.
die Lösung könnte so aussehen: (ungetestet)
import re
fd=open(file) content=fd.read() fd.close()
matches=re.findall(r'<Kennung>.*<Nummer>(<relevanter text>)', content) print matches
Eine Einführung in die Programmiersprache findest du hier: http://www.thomas-guettler.de/vortraege/python/einfuehrung.html
thomas
lug-dd@mailman.schlittermann.de