Como posso editar um arquivo grande no local?

18

Eu tenho alguns arquivos com tamanho> 1 GB cada. Preciso remover os últimos bytes dos arquivos. Como eu posso fazer isso? Prefiro editar o arquivo no local para economizar espaço em disco.

Estou no HP-UX.

Hemant
fonte
Eu acho que vimtem um limite de 4G (pode estar errado), mas não acho que ele funcione (pode estar errado).
Xenoterracide
1
@xenoterracide: Eu não tenho vim aqui :-( e vi dá "arquivo TMP muito grande" erro.
Hemant
1
@ Hernant: Essa mensagem informa tudo o que você precisa saber sobre a edição no local: o vi está tentando copiá-lo para / tmp para trabalhar. Eu acho que o vim fará a mesma coisa e ele gosta de criar um backup no mesmo diretório.
David Thornley

Respostas:

10

Tente usar o hexedit Não tentei no HP-UX, mas deve funcionar. Permite mover para um local em um arquivo e truncar. Tenho certeza de que ele não lê o arquivo inteiro, mas apenas busca o local apropriado para exibição.

O uso é bastante simples depois que você o lança, as teclas de seta permitem que você se mova. F1 dá ajuda. Ctrl-G move para um local no arquivo (dica: para mover para o final, use o tamanho do arquivo na linha inferior da tela). Posicione o cursor no primeiro byte que você deseja truncar e pressione Escape T depois de confirmar que o truncado foi concluído. Ctrl-x sai.

Richm
fonte
14

Corte 2 kilobytes do final do arquivo:

truncate -s-2K file
Maciej Piechotka
fonte
6

Você pode usar o dd, por exemplo:

dd if=yourfile of=outname bs=4k count=thefirstX4kb
maxschlepzig
fonte
1
Obrigado pela sua resposta. Prefiro editar o arquivo no local para economizar espaço em disco. Se nada ajudar, usarei dd :-).
Hemant
6

Use uma ferramenta que lhe dê acesso à truncatechamada do sistema. Você pode fazer isso apenas com ferramentas POSIX. Aviso, digitado em um navegador; tenha um cuidado especial, pois ddé ainda mais implacável com os erros do que o comando unix usual. 123456 é o número de bytes a serem mantidos.

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

Uma versão Perl é muito mais legível:

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

Você pode usar splitou ed, awkou qualquer linguagem de programação.

Mircea Vutcovici
fonte
Obrigado pela sua resposta. Prefiro editar o arquivo no local para economizar espaço em disco e memória.
Hemant