Der Grund war definitiv der Speicher.
Weil Sie nicht „ den Vergleich von zwei Dateien“, die Sie verwenden eine 250MB - Datei als Quelle von Mustern für grep. Grep kompiliert diese Muster in eine Variante eines deterministischen endlichen Automaten, und die Darstellung dieser DFAs belegt den Speicher. Wenn Sie viele Muster haben (z. B. 250 MB Muster), nimmt dies viel Platz in Anspruch, da die Umwandlung des nichtdeterministischen endlichen Automaten, der vielen Mustern entspricht, in einen DFA zu exponentiellem Aufblasen führen kann.
grep
kann sehr wenige Muster in einer oder mehreren großen Dateien suchen. Es ist nicht zum "Vergleichen" von Dateien gedacht. Wenn Sie versuchen, es dafür zu verwenden, können Dinge schief gehen. Wie in Ihrem Fall.
Komplexität ist wichtig, deshalb lernst du O-Notation und all das ausgefallene Zeug.
- In einer solchen Situation verwenden Sie ein Programm, das auf Ihre Situation zugeschnitten ist, nicht ein Programm, das einen Algorithmus verwendet, der für Ihre Art von Problem raumexponentiell ist.
Sie sagten, Sie wollten die Alternative nicht wissen, aber da es sich um ein weniger bekanntes Werkzeug handelt, sage ich es Ihnen trotzdem:
Wenn die Frage "Ist jede Zeile von Datei1 auch unabhängig von der Reihenfolge in Datei2 vorhanden" vorhanden ist, müssen Sie beide Dateien sortieren. Anschließend verwenden Sie comm
, was sortierte Dateien erwartet, und gibt (1) Zeilen in Datei1 aus Nicht in Datei2, (2) Zeilen in Datei2, sondern nicht in Datei1 und (3) Zeilen in beiden Dateien, je nach Belieben.