Teilen Sie die Datei in kleinere Stücke. Sie verbrauchen wahrscheinlich viel Speicherplatz, indem Sie nur Bits im Speicher oder auf der Festplatte verschieben.
Dies ist ähnlich, wie es viel schneller zu verketten/ersetzen auf einem Array von Zeichenfolgen anstelle einer einzelnen Zeichenfolge ist.
Der einzige Trick ist es, sicherzustellen, wo Sie die Pause in der Datei ist keine gute Übereinstimmung, die relativ trivial ist. In der Tat, wenn Sie es durch Linien tun können, ist das noch besser, keine Notwendigkeit, gegen Übereinstimmungen zu überprüfen.
Ich finde es auch seltsam, dass es PERL Wochen dauern würde. Es gibt einige anekdotische Hinweise darauf, dass es, dass in weniger als einer Stunde verarbeiten kann:
In der Tat, sie über 1gb Dateien unter 2 Minuten in der zweiten Verbindung sprechen .
Und ich würde nicht vermuten, dass eine Ersetzung Vorgang dauert deutlich länger als ein Kopiervorgang für eine Datei, schließlich, es nur Teile der Datei abholen und einige der Bits ersetzen, wie Sie sie verschieben.Es sollte sich schnell in der Nähe der Geschwindigkeit der Lage sein, sie zu ersetzen, kopieren (wie sie bereits im Speicher ist)
Gibt es weitere Überlegungen, z. B. dass die Wörter, die gefunden und ersetzt werden, sich nicht überschneiden, oder müssen die Änderungen in b.txt der Reihe nach ausgeführt werden? –
Das Wort naiv ist etwas lächerlich, da sed/perl/python seit längerem erfolgreich mit großen Log-Dateien verwendet wird. – cgp