Split de arquivo por palavra [RESOLVIDO]

1. Split de arquivo por palavra [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 02/09/2021 - 14:13h

Galera se puderem me ajudar, desde já mto obrigado.

Eu tenho um arquivo (do tipo --> UTF-8 Unicode text, with CRLF line terminators) gigantesco separado por consultas, que vou chamá-lo de CONSULTA.TXT, e dentro dele eu tenho informações dispostas assim:



consulta_2
------------------------------------------------
1|ABCD|1900-01-01|WEDF45|45,23
2|RTY|1800-02-01|GJDJ65|78,56

Total de Registros: 2



consulta_3
-----------------------------------------------
RTGYS|456|1900-01-01

Total de Registros: 1



consulta_4
9655,23|258|789|ZFGHH
78,36|2|96325410|FHJEWOG

Total de Registros: 2

Sendo assim queria que onde houvesse a palavra "consulta_" virasse um arquivo novo com o nome CONSULTA_2.TXT, CONSULTA_3.TXT, CONSULTA_4.TXT e assim sucessivamente com todas as informações das respectivas consultas até o total de linhas (que seria o trailer dos arquivos separados).

Seria possível fazer um split dessa forma?

Vlw galera!

P.S.: Coloquei a imagem EXEMPLO_ARQUIVO_COSNSULTA.jpg para exemplificar melhor como é o arquivo original.


  


2. Split de arquivo por palavra

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 02/09/2021 - 14:47h

Galera acredito que tenha conseguido resolver.

Mas caso tenham uma solução melhor e puderem postar aqui eu agradeço.

Solução:
csplit --suppress-matched --prefix CONSULTA_ --suffix-format %02d.txt CONSULTA.TXT '/^consulta_/' '{*}'



Abraço!


3. Re: Split de arquivo por palavra [RESOLVIDO]

Adriano Christi
ACMM

(usa Ubuntu)

Enviado em 02/09/2021 - 15:55h


alex_tj escreveu:

Galera se puderem me ajudar, desde já mto obrigado.

Eu tenho um arquivo (do tipo --> UTF-8 Unicode text, with CRLF line terminators) gigantesco separado por consultas, que vou chamá-lo de CONSULTA.TXT, e dentro dele eu tenho informações dispostas assim:



consulta_2
------------------------------------------------
1|ABCD|1900-01-01|WEDF45|45,23
2|RTY|1800-02-01|GJDJ65|78,56

Total de Registros: 2



consulta_3
-----------------------------------------------
RTGYS|456|1900-01-01

Total de Registros: 1



consulta_4
9655,23|258|789|ZFGHH
78,36|2|96325410|FHJEWOG

Total de Registros: 2

Sendo assim queria que onde houvesse a palavra "consulta_" virasse um arquivo novo com o nome CONSULTA_2.TXT, CONSULTA_3.TXT, CONSULTA_4.TXT e assim sucessivamente com todas as informações das respectivas consultas até o total de linhas (que seria o trailer dos arquivos separados).

Seria possível fazer um split dessa forma?

Vlw galera!

P.S.: Coloquei a imagem EXEMPLO_ARQUIVO_COSNSULTA.jpg para exemplificar melhor como é o arquivo original.


Eu fiz em Python, não deu tempo de fazer mais bem elaborado porque tive que me ocupar e ficou assim:

with open('Consultas.txt', 'r') as arq:
lines = [x.split( ) for x in arq]
for x in lines:
t = [''.join(x) for x in lines]
arq.close( )

t2 = ' '.join(t).split('consulta')
t3 = [x.split( ) for x in t2]

for x in range(len(t3)):
for y in t3[x]:
with open(f'Consulta_{x}.txt', 'a') as arq2:
arq2.write(f'{y}\n')


Eu acho que isso ajuda.

Guns don't kill people. People kill people.


4. Re: Split de arquivo por palavra [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/10/2021 - 02:02h

Com o "sed", formate o arquivo:
Fim de linha padrão Unix, elimine linhas vazias e linhas contendo "-------------".
Deixe uma linha "vazia", após "Total de Registros: n"
consulta_2
1|ABCD|1900-01-01|WEDF45|45,23
2|RTY|1800-02-01|GJDJ65|78,56
Total de Registros: 2

consulta_3
RTGYS|456|1900-01-01
Total de Registros: 1

consulta_4
9655,23|258|789|ZFGHH
78,36|2|96325410|FHJEWOG
Total de Registros: 2


Agora é só executar:
awk 'BEGIN{RS="\n\n";FS="\n"} {for(n=2;n<=NF;n++) print $n > $1".txt" }' CONSULTAS.txt  


______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts