it-swarm.com.de

Wie bearbeite ich Multi-Gigabyte-Textdateien? Vim funktioniert nicht = (

Gibt es Editoren, die Multi-Gigabyte-Textdateien bearbeiten können, indem sie möglicherweise nur kleine Teile auf einmal in den Speicher laden? Es scheint nicht, dass Vim damit umgehen kann = (

105
Philip Brocoum

Wenn Sie auf * nix sind (und davon ausgehen, dass Sie nur Teile der Datei (und nur selten) ändern müssen), können Sie die Dateien aufteilen (mit dem Befehl split) und einzeln bearbeiten (mit awk, sed oder ähnliches) und verketten Sie sie, nachdem Sie fertig sind.

cat file2 file3 >> file1
68
Al pacino

Strg-C stoppt das Laden der Datei. Wenn die Datei klein genug ist, haben Sie möglicherweise das Glück gehabt, den gesamten Inhalt geladen und gerade alle Schritte nach dem Laden abgebrochen zu haben. Stellen Sie sicher, dass die gesamte Datei geladen wurde, wenn Sie diesen Tipp verwenden.

Vim kann ziemlich gut mit großen Dateien umgehen. Ich habe gerade eine 3,4 GB-Datei bearbeitet, Zeilen gelöscht usw. Drei Dinge zu beachten:

  1. Drücken Sie Strg-C: Vim versucht zunächst, die gesamte Datei einzulesen, um Syntaxhervorhebungen und die Anzahl der Zeilen in der Datei usw. vorzunehmen. Strg-C bricht diese Aufzählung (und die Syntaxhervorhebung) ab und lädt nur das, was vorhanden ist benötigt, um auf Ihrem Bildschirm anzuzeigen.
  2. Readonly: Vim wird wahrscheinlich schreibgeschützt, wenn die Datei zu groß ist, um eine zu erstellen. Datei kopieren, um die Änderungen durchzuführen. Ich musste w! um die Datei zu speichern, und das war der Zeitpunkt, an dem es am längsten gedauert hat.
  3. Gehe zu Zeile: Eingabe von :115355 bringt Sie direkt zur Zeile 115355, die in diesen großen Dateien viel schneller ist. Vim scheint jedes Mal, wenn ein Zeilenpuffer geladen wird, vom Anfang an zu scannen, und wenn Sie Strg-F gedrückt halten, um die Datei zu durchsuchen, wird dies gegen Ende sehr langsam.

Hinweis - Wenn Ihre Vim-Instanz schreibgeschützt ist, weil Sie Strg-C gedrückt haben, hat Vim möglicherweise nicht die gesamte Datei in den Puffer geladen. Wenn dies passiert, speichern Sie es speichert nur das, was sich im Puffer befindet, nicht die gesamte Datei. Sie können schnell mit einem G zum Ende springen, um sicherzustellen, dass alle Zeilen in Ihrer Datei vorhanden sind.

142
Aaron R.

Es können Plugins sein, die dazu führen, dass es erstickt. (Syntaxhervorhebung, Falten usw.)

Sie können vim ohne Plugins ausführen.

vim -u "NONE" hugefile.log

Es ist minimalistisch, aber es gibt Ihnen zumindest die vi Bewegungen, die Sie gewohnt sind.

syntax off

ist eine andere offensichtliche. Reduzieren Sie Ihre Installation und geben Sie die Quelle an, die Sie benötigen. Sie erfahren, wozu es in der Lage ist und ob Sie eine Aufgabe auf andere Weise erledigen müssen.

70
michael

Eine leichte Verbesserung gegenüber der Antwort von @Al pachio mit der split + vim-Lösung können Sie die Dateien mit einem Glob einlesen, indem Sie effektiv Datei-Chunks als Puffer verwenden, z

$ split -l 5000 myBigFile
xaa
xab
xac
...

$ vim xa*
#edit the files

:nw  #skip forward and write
:n!  #skip forward and don't save 

:Nw  #skip back and write
:N!  #skip back and don't save
19
Amos Folarin

Sie können dieses VIM-Plugin ausprobieren, das bestimmte vim-Funktionen deaktiviert, um das Laden großer Dateien zu beschleunigen.

14
RedBlueThing

Ich habe versucht, dies zu tun, hauptsächlich mit Dateien um 1 GB, als ich eine kleine Änderung an einem SQL-Dump vornehmen musste. Ich bin auf Windows, was es zu einem großen Schmerz macht. Es ist ernsthaft schwierig.

Die naheliegende Frage lautet: "Warum brauchen Sie das?" Ich kann Ihnen aus Erfahrung sagen, dass Sie dies mehr als einmal versuchen müssen, wahrscheinlich wirklich wollen, um einen anderen Weg zu finden.

Also, wie machst du das? Es gibt ein paar Möglichkeiten, wie ich es gemacht habe. Manchmal kann ich vim oder nano dazu bringen, die Datei zu öffnen, und ich kann sie verwenden. Das ist ein sehr harter Schmerz, aber es funktioniert.

Wenn das nicht funktioniert (wie in Ihrem Fall), haben Sie nur wenige Möglichkeiten. Sie können ein kleines Programm schreiben, um die gewünschten Änderungen vorzunehmen (z. B. Suchen & Ersetzen). Sie könnten ein Befehlszeilenprogramm verwenden, das dies möglicherweise kann (möglicherweise mit sed/awk/grep/etc).

Wenn dies nicht funktioniert, können Sie die Datei immer in Blöcke aufteilen (so etwas wie split ist die naheliegende Wahl, aber Sie können head/tail verwenden, um das gewünschte Teil zu erhalten) und dann das Teil bearbeiten (s) die es brauchen, und später neu kombinieren.

Vertrau mir, versuche einen anderen Weg zu finden.

8
MBCook

Ich denke, dass Hex-Editoren ziemlich häufig mit großen Dateien umgehen. Unter Windows verwende ich HxD , das behauptet, Dateien mit bis zu 8 EB (8 Milliarden Gigabyte) zu verarbeiten.

6
John Y

Ich verwende Vim 7.3.3 unter Win7 x64 mit dem LargeFile-Plugin von Charles Campbell , um Multi-Gigabyte-Nur-Text-Dateien zu verarbeiten. Es funktioniert wirklich gut.

Ich hoffe du kommst richtig.

4
AndrewJacksonZA

Wow, ich habe es nie geschafft, Vim zum Würgen zu bringen, auch nicht mit ein oder zwei GB. Ich habe gehört, dass UltraEdit (unter Windows) und BBEdit (auf Macs) noch besser für noch größere Dateien geeignet sind, aber ich habe keine persönlichen Erfahrungen.

2
Alex Martelli

In der Vergangenheit habe ich mit diesem Tool eine 3-Gig-Datei geöffnet http://csved.sjfrancke.nl/

2
Zaffiro

Persönlich mag ich ltraEdit . Hier ist ihr kleines spiel auf große Dateien .

2
JP Alioto

Ich habe den integrierten Editor/Viewer von FAR Commander für sehr große Protokolldateien verwendet.

2
azheglov

Ich habe TextPad für große Protokolldateien verwendet, es gibt keine Obergrenze.

1
bstoney

Das einzige, was ich für so etwas verwenden konnte, ist mein Lieblings-Mac-Hex-Editor, 0XED. Dies war jedoch bei Dateien der Fall, die ich mit zehn Megabyte als groß betrachtete. Ich bin mir nicht sicher, wie weit es gehen wird. Ich bin mir ziemlich sicher, dass nur Teile der Datei auf einmal in den Speicher geladen werden.

1
AriX

In der Vergangenheit habe ich erfolgreich einen Split/Edit/Join-Ansatz verwendet, wenn Dateien sehr groß werden. Damit dies funktioniert, müssen Sie in der Originaldatei wissen, wo sich der zu bearbeitende Text befindet.

0
Cheeso