¿Cómo puedo editar un archivo grande en su lugar?

18

Tengo algunos archivos de tamaño> 1 GB cada uno. Necesito eliminar los últimos bytes de los archivos. ¿Cómo puedo hacerlo? Prefiero editar el archivo en su lugar para ahorrar espacio en disco.

Estoy en HP-UX.

Hemant
fuente
Creo que vimtiene un límite de 4G (podría estar equivocado) pero no creo que lo haga en su lugar (podría estar equivocado).
xenoterracide
1
@xenoterracide: No tengo vim aquí :-( y vi da el error "Archivo Tmp demasiado grande".
Hemant
1
@Hernant: Ese mensaje le dice todo lo que necesita saber sobre la edición en el lugar: vi está tratando de copiarlo en / tmp para trabajar. Creo que vim hará lo mismo, y le gusta crear una copia de seguridad en el mismo directorio.
David Thornley

Respuestas:

10

Intenta usar hexedit No lo he probado en HP-UX pero debería funcionar. Le permite moverse a una ubicación en un archivo y truncar. Estoy bastante seguro de que no lee todo el archivo sino que solo busca la ubicación adecuada para su visualización.

El uso es bastante simple una vez que lo ha lanzado, las teclas de flecha le permiten moverse. F1 da ayuda. Ctrl-G se mueve a una ubicación en el archivo (pista: para mover hasta el final use el tamaño del archivo desde la fila inferior de la pantalla). Coloque el cursor en el primer byte que desea truncar y luego presione Escape T una vez que confirme que el truncamiento se habrá realizado. Ctrl-x sale.

Richm
fuente
14

Corte 2 kilobytes desde el final del archivo:

truncate -s-2K file
Maciej Piechotka
fuente
6

Puedes usar dd por ejemplo:

dd if=yourfile of=outname bs=4k count=thefirstX4kb
maxschlepzig
fuente
1
Gracias por su respuesta. Prefiero editar el archivo en su lugar para ahorrar espacio en disco. Si nada ayuda usaré dd :-).
Hemant
6

Use una herramienta que le permita acceder a la truncatellamada del sistema. Puede hacerlo solo con las herramientas POSIX. Advertencia, escrita en un navegador; tenga especial cuidado ya que ddes aún más implacable de errores que el comando habitual de Unix. 123456 es el número de bytes a mantener.

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

Una versión de Perl es mucho más legible:

perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate
Gilles 'SO- deja de ser malvado'
fuente
1

Puede usar splito ed, awko cualquier lenguaje de programación.

Mircea Vutcovici
fuente
Gracias por su respuesta. Prefiero editar el archivo en su lugar para ahorrar espacio en disco y memoria.
Hemant