Dividir arquivo grande, ter número de índice inicial arbitrário

2

Eu faço um monte de manipulação de arquivos no meu sistema e em um trabalho em lote eu acabo com cerca de 16 Gb. Preciso preparar esses dados em partes menores para outro processo.

Eu o dividi em 10 mil linhas por arquivo e índice numérico, preenchido com 5 dígitos

split -a 5 -d -l 10000 large_input_file /out_path/out.

Dessa forma, acabo com arquivos nomeados como out.00000
out.00001
...

O problema é que dessa maneira a indexação sempre começa com 0.
Existe uma maneira de defini-lo para o índice inicial arbitrário? homem não revela nada ...

    
por nEJC 01.01.2011 / 15:01

2 respostas

1

Não é nada demais renumerar os arquivos depois.

split -a 5 -d -l 10000 large_input_file /out_path/tmp.
for x in /outpath/tmp.*; do
  mv -i -- "$x" "${x%/*}/out.$(printf %05d $((10#${x##*.}+1)))";
done

Observe algumas armadilhas:

  • A abordagem ingênua de renomear out.00000 para out.00001 e assim por diante não funciona, porque a globbing se expande para uma lista ordenada lexicograficamente, portanto, a primeira renomeação sobrescreveria o segundo arquivo. Em zsh, você pode usar o qualificador (On) glob. Em outros shells, a maneira mais fácil é alterar também o radical do nome.
  • Um 0 na aritmética shell faz com que o número seja interpretado em octal. 10#${…} força uma interpretação decimal.
  • printf %05d é uma maneira de manter o preenchimento em 5 dígitos.
por Gilles 01.01.2011 / 18:14
0

Acho que esta opção não existe em divisão. Eu tenho esse bug (solicitação de detalhe) para o coreutils - link

    
por Vojtech Trefny 01.01.2011 / 16:44