Precisa dividir um arquivo em vários arquivos, mas garantir que os dados agrupados permaneçam no mesmo arquivo [duplicado]

0

Esta questão não é uma duplicata, porque aqui também precisamos garantir que o grupo de valores / linhas comuns permaneça no mesmo arquivo dividido (e não esteja espalhado em vários arquivos divididos).

Tudo, tentei pesquisar uma solução no Google, mas não encontrei nenhuma que atendesse às minhas necessidades.

Pergunta: Eu tenho um arquivo enorme que precisa ser dividido em vários arquivos se o tamanho for superior a 2 GB. Isso, estou planejando fazer usando a contagem de registros. Mas o desafio é que, quando eu divido o arquivo, os dados do grupo não devem ser divididos. Deve permanecer em arquivo único.

ex:

A,1,2,6/11/2018,X,Y,Z
A,2,2,6/11/2018,X,Y,B
A,3,2,6/11/2018,X,Y,Z
A,4,2,6/12/2018,X,Y,Z
B,1,2,6/11/2018,X,Y,Z
B,2,2,6/11/2018,X,Y,B
A,5,2,6/15/2018,X,C,Z
A,6,3,6/110/2018,A,Y,Z
C,3,2,6/11/2018,X,Y,Z
C,4,2,6/12/2018,X,Y,Z
C,5,2,6/15/2018,X,C,Z
D,6,3,6/110/2018,A,Y,Z
E,6,3,6/110/2018,A,Y,Z
E,6,3,6/110/2018,A,Y,Z
G,6,3,6/110/2018,A,Y,Z

No exemplo acima, digamos que minha chave de grupo seja a primeira coluna. Portanto, se eu decidir dividir um arquivo em vários arquivos (com a contagem de registros cortada em cada arquivo como 7 registros máx.), Não quero que os registros com o valor "A" sejam divididos em vários arquivos. Da mesma forma, os registros com "B", "C" etc também devem permanecer em arquivo único. Todos os dados agrupados devem permanecer no mesmo arquivo dividido. Um total de 3 arquivos são criados a partir do exemplo acima (mas os mesmos dados do grupo devem permanecer em um único arquivo). arquivo dividido)

Para o exemplo acima: abaixo deve ser um exemplo de saída:

op_file_1

A,1,2,6/11/2018,X,Y,Z
A,2,2,6/11/2018,X,Y,B
A,3,2,6/11/2018,X,Y,Z
A,4,2,6/12/2018,X,Y,Z
A,5,2,6/15/2018,X,C,Z
A,6,3,6/110/2018,A,Y,Z
G,6,3,6/110/2018,A,Y,Z

op_file_2

B,1,2,6/11/2018,X,Y,Z
B,2,2,6/11/2018,X,Y,B
C,3,2,6/11/2018,X,Y,Z
C,4,2,6/12/2018,X,Y,Z
C,5,2,6/15/2018,X,C,Z
E,6,3,6/110/2018,A,Y,Z
E,6,3,6/110/2018,A,Y,Z

op_file_3

D,6,3,6/110/2018,A,Y,Z
    
por cmaroju 11.06.2018 / 18:46

1 resposta

1

$ awk -F, '{outfile="output."$1; print $0 > outfile}' input
$ ls
input    output.A output.B output.C output.D
    
por 11.06.2018 / 18:55

Tags