Dividir documento em vários arquivos por informação de coluna [RESOLVIDO]

1. Dividir documento em vários arquivos por informação de coluna [RESOLVIDO]

Deidy Campiol
DeidyC

(usa Outra)

Enviado em 29/03/2016 - 21:25h

Boa Noite.

Desde já agradeçoa a atenção.

Por gentileza,

Tenho um arquivo gigantesco e preciso dividi-lo em vários outros

Eis um exemplo, tenho esse arquivo:

101 TIO TIO 1
102 TIO TIO 1
101 TIA TIA 3
102 TIA TIA 3
101 TIO TIO 5
102 TIO TIO 5

e preciso de três arquivos separados pelas informações da coluna 4

file1
101 TIO TIO 1
102 TIO TIO 1

file2
101 TIA TIA 3
102 TIA TIA 3

file3
101 TIO TIO 5
102 TIO TIO 5

No entanto, meu arquivo é incrivelmente grande. Obrigado







  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/03/2016 - 22:05h

DeidyC escreveu:

Boa Noite.

Desde já agradeçoa a atenção.

Por gentileza,

Tenho um arquivo gigantesco e preciso dividi-lo em vários outros

Eis um exemplo, tenho esse arquivo:

101 TIO TIO 1
102 TIO TIO 1
101 TIA TIA 3
102 TIA TIA 3
101 TIO TIO 5
102 TIO TIO 5

e preciso de três arquivos separados pelas informações da coluna 4

file1
101 TIO TIO 1
102 TIO TIO 1

file2
101 TIA TIA 3
102 TIA TIA 3

file3
101 TIO TIO 5
102 TIO TIO 5

No entanto, meu arquivo é incrivelmente grande. Obrigado


Boa noite DeidyC.
Segue o script:

#!/bin/bash
NL=$(awk 'END {print NR}' $1)
while FS=" " read -r c1 c2 c3 c4;do
for ((i=1;i<=$NL;i++));do
if [ $c4 -eq $i ];then
echo "$c1 $c2 $c3 $c4" >> arquivo"$i"
fi
done
done < $1


OBS.:
Salve em um arquivo de texto, e de permissão para execução:
chmod +x nomedoscript 

Para EXECUTAR, faça:
./nomedoscript.sh ARQUIVO_FONTE
Onde:
ARQUIVO_FONTE é o seu arquivo com os dados.

cat ARQUIVO_FONTE

101 TIO TIO 1
102 TIO TIO 1
101 TIA TIA 3
102 TIA TIA 3
101 TIO TIO 5
102 TIO TIO 5


--------------------------------------------------------------------------------------------------------
Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)

--------------------------------------------------------------------------------------------------------
Att.:
Marcelo




3. Re: Dividir documento em vários arquivos por informação de coluna

Deidy Campiol
DeidyC

(usa Outra)

Enviado em 29/03/2016 - 22:26h

msoliver escreveu:

DeidyC escreveu:

Boa Noite.

Desde já agradeçoa a atenção.

Por gentileza,

Tenho um arquivo gigantesco e preciso dividi-lo em vários outros

Eis um exemplo, tenho esse arquivo:

101 TIO TIO 1
102 TIO TIO 1
101 TIA TIA 3
102 TIA TIA 3
101 TIO TIO 5
102 TIO TIO 5

e preciso de três arquivos separados pelas informações da coluna 4

file1
101 TIO TIO 1
102 TIO TIO 1

file2
101 TIA TIA 3
102 TIA TIA 3

file3
101 TIO TIO 5
102 TIO TIO 5

No entanto, meu arquivo é incrivelmente grande. Obrigado


Boa noite DeidyC.
Segue o script:

#!/bin/bash
NL=$(awk 'END {print NR}' $1)
while FS=" " read -r c1 c2 c3 c4;do
for ((i=1;i<=$NL;i++));do
if [ $c4 -eq $i ];then
echo "$c1 $c2 $c3 $c4" >> arquivo"$i"
fi
done
done < $1


OBS.:
Salve em um arquivo de texto, e de permissão para execução:
chmod +x nomedoscript 

Para EXECUTAR, faça:
./nomedoscript.sh ARQUIVO_FONTE
Onde:
ARQUIVO_FONTE é o seu arquivo com os dados.

cat ARQUIVO_FONTE

101 TIO TIO 1
102 TIO TIO 1
101 TIA TIA 3
102 TIA TIA 3
101 TIO TIO 5
102 TIO TIO 5


--------------------------------------------------------------------------------------------------------
Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)

--------------------------------------------------------------------------------------------------------
Att.:
Marcelo



Muito Obrigado, Marcelo
Deu certinho... Agradeço imensamente sua ajuda. Grande abraço.




4. Re: Dividir documento em vários arquivos por informação de coluna [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/03/2016 - 22:30h

Esse programa não mostra coisa alguma porque ele já cria os arquivos no seu HD.
Experimente ver se os arquivos foram criados no seu disco.

Para ficar mais visível, experimente criar um diretório chamado TESTE, copiar o seu arquivo de texto principal e o arquivo de script dentro dele. Entre no diretório TESTE no terminal e execute.

Você pode abrir outra instância do terminal e dar ls dentro do diretório e ver se ele vai criando os arquivos.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: Dividir documento em vários arquivos por informação de coluna [RESOLVIDO]

Deidy Campiol
DeidyC

(usa Outra)

Enviado em 29/03/2016 - 22:38h

listeiro_037 escreveu:

Esse programa não mostra coisa alguma porque ele já cria os arquivos no seu HD.
Experimente ver se os arquivos foram criados no seu disco.

Para ficar mais visível, experimente criar um diretório chamado TESTE, copiar o seu arquivo de texto principal e o arquivo de script dentro dele. Entre no diretório TESTE no terminal e execute.

Você pode abrir outra instância do terminal e dar ls dentro do diretório e ver se ele vai criando os arquivos.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Opa. Deu certinho o programa. Mas obrigado pela dica. Grande abraço.


6. Re: Dividir documento em vários arquivos por informação de coluna [RESOLVIDO]

Deidy Campiol
DeidyC

(usa Outra)

Enviado em 31/03/2016 - 13:45h

msoliver escreveu:

DeidyC escreveu:

Boa Noite.

Desde já agradeçoa a atenção.

Por gentileza,

Tenho um arquivo gigantesco e preciso dividi-lo em vários outros

Eis um exemplo, tenho esse arquivo:

101 TIO TIO 1
102 TIO TIO 1
101 TIA TIA 3
102 TIA TIA 3
101 TIO TIO 5
102 TIO TIO 5

e preciso de três arquivos separados pelas informações da coluna 4

file1
101 TIO TIO 1
102 TIO TIO 1

file2
101 TIA TIA 3
102 TIA TIA 3

file3
101 TIO TIO 5
102 TIO TIO 5

No entanto, meu arquivo é incrivelmente grande. Obrigado


Boa noite DeidyC.
Segue o script:

#!/bin/bash
NL=$(awk 'END {print NR}' $1)
while FS=" " read -r c1 c2 c3 c4;do
for ((i=1;i<=$NL;i++));do
if [ $c4 -eq $i ];then
echo "$c1 $c2 $c3 $c4" >> arquivo"$i"
fi
done
done < $1


OBS.:
Salve em um arquivo de texto, e de permissão para execução:
chmod +x nomedoscript 

Para EXECUTAR, faça:
./nomedoscript.sh ARQUIVO_FONTE
Onde:
ARQUIVO_FONTE é o seu arquivo com os dados.

cat ARQUIVO_FONTE

101 TIO TIO 1
102 TIO TIO 1
101 TIA TIA 3
102 TIA TIA 3
101 TIO TIO 5
102 TIO TIO 5


--------------------------------------------------------------------------------------------------------
Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)

--------------------------------------------------------------------------------------------------------
Att.:
Marcelo

Oi, Marcelo, desculpa incomodar novamente, a programação que você fez roda certinho com arquivo pequenos, experimentei um com 20 linhas, mas quando utilizo arquivos grandes, meu arquivo 1 000 000 de linhas (1,5 GB) , ele não funciona, deixei rodar por dois dias e nada de acabar, além disso ele gera arquivos totalmente incompletos, será que ele tem algum problema de otimização você tem alguma sugestão.
Muito Obrigado!






7. Re: Dividir documento em vários arquivos por informação de coluna [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 31/03/2016 - 17:20h


DeidyC escreveu:
Oi, Marcelo, desculpa incomodar novamente, a programação que você fez roda certinho com arquivo pequenos, experimentei um com 20 linhas, mas quando utilizo arquivos grandes, meu arquivo 1 000 000 de linhas (1,5 GB) , ele não funciona, deixei rodar por dois dias e nada de acabar, além disso ele gera arquivos totalmente incompletos, será que ele tem algum problema de otimização você tem alguma sugestão.
Muito Obrigado!

----------------------------------------------------------------------------------------------------------------------------------
Boa tarde Deidy.
Quais as configurações seu PC?

Eliminei o WHILE, testei com uma arquivo de 500 linhas,
gerou 250 ARQUIVOS:
time ./ORDENA-04.sh arq3 
real 0m1.370s
user 0m0.060s
sys 0m0.120s

NOVO SCRIPT:
#!/bin/bash
# USO: ./ORDENA-04.sh arquivo_dados
[ $1 ] || { sed -n 2p $0 ; exit ; }
> ARQ_TEMP.txt
ARQTMP="ARQ_TEMP.txt"
NL=$(awk 'END {print NR}' $1)
for ((i=1;i<=$NL;i++));do
if egrep " $i$" "$1" > $ARQTMP ;then
ARQ=$(printf "ARQUIVO-%07d\n" $i)
cat ARQ_TEMP.txt >> $ARQ
fi
done

OBS:
Tendo em vista que seu arquivo é bastante grande, recomendo RODAR o SCRIPT, somente com o MODO TEXTO CARREGADO.

abç.:
Marcelo




8. Re: Dividir documento em vários arquivos por informação de coluna [RESOLVIDO]

Deidy Campiol
DeidyC

(usa Outra)

Enviado em 01/04/2016 - 10:37h

msoliver escreveu:


DeidyC escreveu:
Oi, Marcelo, desculpa incomodar novamente, a programação que você fez roda certinho com arquivo pequenos, experimentei um com 20 linhas, mas quando utilizo arquivos grandes, meu arquivo 1 000 000 de linhas (1,5 GB) , ele não funciona, deixei rodar por dois dias e nada de acabar, além disso ele gera arquivos totalmente incompletos, será que ele tem algum problema de otimização você tem alguma sugestão.
Muito Obrigado!

----------------------------------------------------------------------------------------------------------------------------------
Boa tarde Deidy.
Quais as configurações seu PC?

Eliminei o WHILE, testei com uma arquivo de 500 linhas,
gerou 250 ARQUIVOS:
time ./ORDENA-04.sh arq3 
real 0m1.370s
user 0m0.060s
sys 0m0.120s

NOVO SCRIPT:
#!/bin/bash
# USO: ./ORDENA-04.sh arquivo_dados
[ $1 ] || { sed -n 2p $0 ; exit ; }
> ARQ_TEMP.txt
ARQTMP="ARQ_TEMP.txt"
NL=$(awk 'END {print NR}' $1)
for ((i=1;i<=$NL;i++));do
if egrep " $i$" "$1" > $ARQTMP ;then
ARQ=$(printf "ARQUIVO-%07d\n" $i)
cat ARQ_TEMP.txt >> $ARQ
fi
done

OBS:
Tendo em vista que seu arquivo é bastante grande, recomendo RODAR o SCRIPT, somente com o MODO TEXTO CARREGADO.

abç.:
Marcelo



Muitissímo obrigado, marcelo








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts