Wie kann ich eine große Datei direkt bearbeiten?

18

Ich habe ein paar Dateien mit einer Größe von jeweils> 1 GB. Ich muss die letzten paar Bytes aus den Dateien entfernen. Wie kann ich es tun? Ich bevorzuge es, die Datei an Ort und Stelle zu bearbeiten, um Speicherplatz zu sparen.

Ich bin auf HP-UX.

Hemant
quelle
Ich denke, vimhat ein 4G-Limit (könnte falsch sein), aber ich denke nicht, dass es es an Ort und Stelle tut (könnte falsch sein).
Xenoterracide
1
@ Xenoterracide: Ich habe keine vim hier :-( und vi gibt "Tmp-Datei zu groß" Fehler.
Hemant
1
@Hernant: In dieser Nachricht erfahren Sie alles, was Sie über das Bearbeiten an Ort und Stelle wissen müssen: vi versucht, es nach / tmp zu kopieren, um daran zu arbeiten. Ich denke, dass vim das gleiche tun wird, und es mag ein Backup im selben Verzeichnis erstellen.
David Thornley

Antworten:

10

Versuchen Sie es mit hexedit. Ich habe es unter HP-UX noch nicht ausprobiert, aber es sollte funktionieren. Hiermit können Sie an einen Speicherort in einer Datei verschieben und abschneiden. Ich bin mir ziemlich sicher, dass es nicht die gesamte Datei einliest, sondern nur nach dem geeigneten Ort für die Anzeige sucht.

Die Bedienung ist ziemlich einfach, sobald Sie sie gestartet haben. Mit den Pfeiltasten können Sie sich fortbewegen. F1 gibt Hilfe. Strg-G bewegt sich an eine Stelle in der Datei (Hinweis: Zum Beenden verwenden Sie die Größe der Datei aus der unteren Zeile der Anzeige). Positionieren Sie den Cursor auf das erste Byte, das Sie abschneiden möchten, und drücken Sie dann Escape T, sobald Sie bestätigt haben, dass das Abschneiden durchgeführt wurde. Strg-x wird beendet.

Richm
quelle
14

2 Kilobyte vom Dateiende abschneiden:

truncate -s-2K file
Maciej Piechotka
quelle
6

Sie können dd zum Beispiel verwenden:

dd if=yourfile of=outname bs=4k count=thefirstX4kb
maxschlepzig
quelle
1
Vielen Dank für Ihre Antwort. Ich bevorzuge es, die Datei an Ort und Stelle zu bearbeiten, um Speicherplatz zu sparen. Wenn nichts hilft, benutze ich dd :-).
Hemant
6

Verwenden Sie ein Tool, mit dem Sie auf den truncateSystemaufruf zugreifen können. Dies ist nur mit POSIX-Tools möglich. Warnung, in einen Browser eingegeben; Seien Sie besonders vorsichtig, da dies ddnoch fehlerverzeihender ist als der übliche Unix-Befehl. 123456 ist die Anzahl der zu speichernden Bytes.

dd if=/dev/null of=/file/to/truncate seek=1 bs=123456

Eine Perl-Version ist viel lesbarer:

perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate
Gilles 'SO - hör auf böse zu sein'
quelle
1

Sie können verwenden splitoder ed, awkoder jede Programmiersprache.

Mircea Vutcovici
quelle
Vielen Dank für Ihre Antwort. Ich bevorzuge die Bearbeitung der Datei, um Speicherplatz und Speicherplatz zu sparen.
Hemant