Regular Expression - verschiedene Ausdrücke testen (grep | )

Status
Nicht offen für weitere Antworten.

mp83

Mitglied
Hallo,

folgendes Problem:
Ich möchte aus einer sehr großen ASCII file Zeilen auslesen.
Ich habe die zunaechst mittels grep (bzw. egrep) und pipe (|) gemacht. Dabei sind mache Ausdruecke
zu finden (grep -i .....) andere wiederrum nicht (grep -v ...)

Jetzt moechte ich aber die Ergebnisse, also gefunde Zeile weiter verwenden. daher ist der Ansatz mir grep zwar mgl.
aber sehr unperformant, bzw. mit unnoetigem Aufwand verbunden.

Deshalb meine Frage:
Wie kann ich den | Operator in Java nutzen.

Bsp.

grep -i TEST file | grep -v XXX

Wie kann ich denn hier einen Ansatz waehlen?


mfg manne
 
Ja, die File in der ich suche beinhaltet Strings, die zur weiteren Verarbeitung
herausgefiltert werden müssen.
Da ich diese im Moment per grep auslese, und anschießend mit einem etwas dreckigem
Hack wieder per FileReader einlese, würde ich gern eine AllInOne Lösung haben.
 
Warum öffnest du die Datei nicht aus dem JavaProgramm heraus und extrahierst die relevanten Zeilen?
Ich verstehen das Problem nicht ganz.
 
Das Problem ist, dass die File ca. 130MB groß ist. (1,7 mio. zeilen!)
Ich kann die relevanten Strings nicht mittels einer regular expresion finden.
Deshalb auch die Pipe.

Die Strings liegen zeilenweise vor, also ich kann bei einem match die komplette zeile extrahieren.

Das Probem ist aber, dass ich nach ca. 1000 verschiedenen Strings suchen muss.

D.h.

bei einem normalen grep würde das 1000 x ein grep benötigen. und 1000 mal ne 130 mb file oeffnen
ist uncool ;-(

Also ich will:

ein mal die file öffenen, anschließend entweder zeilenweiße nach matches suchen (deßhalb die pipe... da ich ca. 3 regex brauche, um einen definitiven treffer zu landen)

d.h. pro zeile nach 1000 matches suchen macht 1000x1,7 mio .. nicht wirklich performant

(aber das ist ja dann eine implementierung sachen - denn np vollständig ist das problem ja nun nicht ;-) )

nun aber noch mal zum proggi ablauf:

ich habe namen, anhand dieser baue ich mir regular expressions auf (das geschieht schon mit einem javaproramm)
die namen weisen auch übereinstimmungen auf, die die ausnutzen kann um matches zu finden.

ich benutzen sozusagen als 1. ein java proggi, was mit anhand der namen (das sind bezeichnungen für register)
ein shell script baut. das wird dann ausgeführt. es werden so viele files kreiert, wie ich namen habe.
dann kommt wieder das javaproggi zum einsatz, was mittel regex die filenamen aus der directory ausliest und mit den namen vergleicht, match eins, wird die file geöffnet und der string extrahiert.

klar?

ich will aber nicht mehr den umweg über das shell script gehen, (war zu debugzwecken ganz gut) will deshalb alles im javaproggi machen.
nur hab ich das problem, dass ich die pipe nicht habe, muss ich deshalb jetzt ein set nehmen und dies immer kleiner werden lassen?

mfg manne
 
mhm - weiß net ob ich das richtig verstanden habe

schreib ein java programm, dass dir zeilenweise die datei ausliest per regex die Zeilen matcht und wenn ein Match gefunden wird speicherst du dir die Zeile (oder die relevante Gruppe des matches)...

alles andere (über shell) halte ich für unsinnig
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben