Dividir um arquivo txt grande em um arquivo pequeno

1

Eu tenho um arquivo txt que é formatado como 250.000 * 3600 (3600 linhas e 250.000 colunas). Vou dividi-lo em 3600 txt pequeno, cada arquivo é 250.000 * 1.

Eu entendo que a divisão basicamente pode dividir arquivos grandes em pequenos com um determinado tamanho. Se eu seguisse a mesma técnica, obteria o mesmo tamanho de arquivos, mas cada arquivo pode ser 249.999 * 1 ou 250.001 * 1.

Alguém pode me ajudar nisso?

    
por John_Amery 06.11.2012 / 23:56

2 respostas

2

Eu sugiro escrever um pequeno roteiro:

NR_LINES=$(wc -l your-file | awk '{ print $1 }')
for line in {1..$NR_LINES}; do
  head -n $line your-file | tail -n 1 > your-file.part$line
done

Isso salva o número de linhas do seu arquivo na variável NR_LINES . Talvez o seu arquivo tenha mais linhas do que aquelas em que você está interessado. Nesse caso, você deve definir a variável para si mesmo. O script faz a iteração de 1 até a última linha do seu arquivo. Para cada execução, imprime as primeiras linhas n ( $line ). Isso é canalizado para tail , que imprime apenas a última linha e salva o resultado em um arquivo.

    
por 07.11.2012 / 00:10
1

Você pode usar csplit para dividir em cada linha usando um padrão /^/ correspondência de início de linha. O argumento {*} repete o padrão até o final da entrada.

csplit --elide-empty-files input.txt '/^/' '{*}'

Sem --elide-empty-files (ou -z ), o arquivo com o índice 0 estará vazio.

    
por 04.08.2014 / 05:12

Tags