Como dividir facilmente um arquivo de texto em partes menores que um limite?

5

Eu tenho alguns arquivos de texto com 100 a 300 MB de comprimento que desejo ver no Emacs, mas meu Emacs entra em problemas de desempenho abrindo e atravessando arquivos tão grandes. Portanto, estou procurando um utilitário fácil para dividir um arquivo em partes gerenciáveis, digamos 50 MB cada e para nomear os blocos com base no nome original mais alguns sufixos para indicar sua localização na seqüência. Cada bloco pegaria onde o anterior estava truncado e não teria mais de 50 MB, com o último bloco possivelmente sendo menor.

Existe alguma ferramenta fácil para fazer isso em um computador Linux, talvez algo como cabeça ou cauda que dê múltiplos resultados, um para cada pedaço?

Por exemplo, dado o arquivo test.out com 120 MB de comprimento, divida-o em test.out.1 para os primeiros 50 MB, test.out.2 para os segundos 50 MBs e test.out.3 para os 20 MB restantes no final do arquivo.

Eu poderia usar combinações de head e tail para obter as peças, mas gostaria de uma ferramenta que abstrai tudo isso, talvez um script Perl ou script Python que alguém já tenha criado para executar essa tarefa?

    
por WilliamKF 11.09.2013 / 03:09

1 resposta

18

Já existe uma boa ferramenta para isso: split

> man 1 split 

NAME
     split -- split a file into pieces

SYNOPSIS
     split [-l line_count] [-a suffix_length] [file [prefix]]
     split -b byte_count[K|k|M|m|G|g] [-a suffix_length] [file [prefix]]
     split -p pattern [-a suffix_length] [file [prefix]]


split --bytes 50M test.out test.out_ dividiria o arquivo test.out em test.out_xaa, test.out_xab, test.out_xac, ...

Uma solução muito mais feia seria usar dd

dd if=test.out of=test.out.part1 bs=1M count=50 skip=0 cria um arquivo chamado test.out.part1 com os primeiros 50M de test.out. Você pode aumentar o valor para pular para 1 para obter o segundo trecho, para 2 para o terceiro etc etc. Apenas certifique-se também de alterar os nomes dos arquivos ou você acabará sobrescrevendo o mesmo arquivo de saída.

    
por 11.09.2013 / 03:13