2016-05-25 8 views
3

Ich versuche zgrep -f zu verwenden, um für jede Zeile einer Abfragedatei nur die erste Übereinstimmung in einer einzelnen zu suchenden Datei zu finden. Da die zu durchsuchende Datei sehr groß ist (~ 3 GB), ist es wichtig, dass zgrep eine Suche nach einer Übereinstimmung für eine aktuelle Abfragezeile findet und dann nach dem Muster in der nächsten Zeile der Abfragedatei sucht. Mein Problem ist, dass "zgrep -m 1 -f" nur die erste Übereinstimmung für die erste Abfragezeile der Abfragedatei findet; dann hört es auf, die Abfragedatei vollständig zu lesen. Gibt es eine andere Möglichkeit, die Optionen -m und -f (z) grep zu kombinieren, um diese Suche effizienter durchzuführen?zgrep erste Übereinstimmung für jede Zeile in einer Datei

Hier sind zwei Linien von meiner 1000-line-Abfrage-Datei-Struktur (wordList.txt): (?)

^dog 
^cat 

Und drei Linien von meiner 3-Millionen-line zu-gesucht-Datei (Googlenews -Vektoren-negative300.txt.gz)

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336 
accordion 0.012590 -0.003692 -0.014291 0.057166 -0.025180 
cat 0.004059 0.067190 -0.093874 0.071370 0.038900 

Und leider diesen Befehl aus:

% zgrep -m 1 -f wordList.txt GoogleNews-vectors-negative300.txt.gz > myVectors.txt 

gibt nur die f rste Spiel für die erste Abfrage:

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336 

Während dieses Befehls (ohne die „-m 1“):

% zgrep -f wordList.txt GoogleNews-vectors-negative300.txt.gz > myVectors.txt 

Gibt den vollständigen erwarteten Ausgang, sondern nimmt unendlich länger, weil es die gesamte Datei sucht jedes Mal: ​​

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336 
cat 0.004059 0.067190 -0.093874 0.071370 0.038900 

Antwort

1

UPDATE: ich landete eine kleine bash-Skript als Wrapper zu schreiben für die Single-Abfrage „zgrep -m 1“, so dass ich das Einfügen es unten, falls jemand laufe sonst in eine ähnlichen Problem. Das Hinzufügen der Kurzschlussfähigkeit beschleunigt meine Suche um ~ 95%:

Verwandte Themen