Unindo arquivos no disco

1

Digamos que eu tenha vários arquivos com a seguinte nomenclatura:

000001
000002
000003
...

Cada um desses arquivos é um arquivo csv (pode incluir caracteres de escape). No total, a pasta tem ~20GB de dados. Como posso juntar esses arquivos em um único arquivo final?

Caso seja importante, geralmente uso Zsh .

    
por Amelio Vazquez-Reina 13.08.2014 / 21:13

3 respostas

5
cat <->.csv > all.csv

Onde <-> corresponde a qualquer número decimal inteiro positivo, irá concatenar todos (em ordem lexical, que para 0 números preenchidos é o mesmo que ordem numérica) em all.csv .

Isso duplicará o espaço no disco. Se você não pretende manter os arquivos originais, você pode fazer:

for i in <->.csv; do
  cat $i && rm -f $i || break
done > all.csv
    
por 13.08.2014 / 22:41
2

Se você usar o redirecionamento, ele anexará ou sobregravará o conteúdo em um arquivo. Se você quiser acrescentar um arquivo, use:

cat file.csv file2.csv file3.csv >> all.csv

Este próximo comando será substituído por all.csv:

cat file.csv file2.csv file3.csv > all.csv

Mas diga que você deseja mover todos os arquivos CSV para um csv em um determinado diretório (para acrescentar):

cat *.csv >> all.csv

    
por 13.08.2014 / 21:22
2

Por que você deseja combinar todos esses arquivos em um único arquivo?

  1. Se você quiser alimentá-los com um programa que queira stdin, você pode fazer isso:

    cat *.csv | prog
    

    ou qualquer um dos outros métodos de combinação mencionados anteriormente.

  2. Se o programa espera um arquivo nomeado como entrada, faça algo assim:

    mkfifo p
    cat *.csv > p &
    prog p
    
  3. Se você quiser um arquivo porque é mais fácil fazer backup de um arquivo, colocar tudo junto pode ser útil. Se você quiser ler os arquivos sem descompactá-los, poderá transformar o arquivo tar em um fs baseado em fusível.

por 22.08.2014 / 22:45