Ler dados em um arquivo de texto [RESOLVIDO]

1. Ler dados em um arquivo de texto [RESOLVIDO]

Whilamys Pontes
whilpontes

(usa openSUSE)

Enviado em 25/02/2013 - 18:52h

Olá pessoal,

Tenho um problema e não sei o que fazer para solucionar.
Alguém poderia me ajudar?

Tenho o seguinte arquivo de .txt com tabulação (em colunas)

6.400 120.795 Trecho 01 125.00 3234.12 0.30
7.900 7620.160 Trecho 02 125.00 3234.12 0.30
6.400 7648.260 Trecho 03 125.00 3234.12 0.30
7.900 7806.777 Trecho 04 125.00 3234.12 0.30
6.400 7878.864 Trecho 05 125.00 3234.12 0.30
7.900 7916.302 Trecho 06 125.00 3234.12 0.30
6.400 7991.896 Trecho 07 125.00 3234.12 0.30
7.900 8037.908 Trecho 08 125.00 3234.12 0.30
6.400 8171.909 Trecho 09 125.00 3234.12 0.30

Eu preciso de um comando que eu consiga capturar os dados por linha, uma por vez.
Exemplo:

Preciso criar um outro arquivo .txt que contenha

Info 01: 6.400
Info 02: 120.795
Info 03: Trecho 01
Info 04: 125.00
Info 05: 3234.12
Info 06: 0.30


Vou criar uma repetição, pretendo usar o While para isso e obter como resultado final:

Conjunto 01

Info 01: 6.400
Info 02: 120.795
Info 03: Trecho 01
Info 04: 125.00
Info 05: 3234.12
Info 06: 0.30


Conjunto 02

Info 01: 7.900
Info 02: 7620.160
Info 03: Trecho 01
Info 04: 125.00
Info 05: 3234.12
Info 06: 0.30

Em diante.




  


2. Re: Ler dados em um arquivo de texto [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/02/2013 - 16:56h

Cara, esse tá complicado. Pelo que vi, o que dificulta é deixar "Trecho 0x" na mesma linha, hehe.

Se não fosse esse detalhe seria tranquilo. Mas é você que quer isso, ou é algum desafio, exercício...?


3. awk

Joanes Pereira Duarte
joanesduarte

(usa Debian)

Enviado em 26/02/2013 - 17:09h

Pesquisa sobre o comando awk, com ele não é difícil de fazer este tipo de formatação. Da pra fazer com sed e cut também mas é meio enrolado. Sugiro mesmo usar o awk.


4. Re: Ler dados em um arquivo de texto [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 26/02/2013 - 18:19h

Sendo um arquivo de "texto puro", os campos seriam delimitados por um SPACE e as linhas por um LINE FEED conforme seu exemplo aparenta.
Porém, vemos que o delimitador neste caso não poderia ser um SPACE, porque um daqueles campos pode - também aparentemente - conter espaços em branco.
O negócio é determinar que espécie de delimitador temos, para poder ler os dados um a um até que seja encontrado esse tal delimitador, e então tratar cada campo conforme seja requerido (tabulações, espécie, etc.).
(Essa forma de pensar é típica de assembleiros do passado. De repente, não precisa nada disso para tratar o arquivo segundo os recursos mais modernos)...






5. Re: Ler dados em um arquivo de texto [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/02/2013 - 18:56h

Não tem nenhum problema em fazer com o delimitador ESPACO...

O problema é que todos viram trecho 01 como uma coisa só... no entanto são duas coisas diferentes

trecho é o terceiro campo
01 é o quarto campo..

A questão é que ambos sao apresentados juntos depois...

só isso...

dá para fazer sem qualquer problema..

pode usar o SED, Awk ou talvez o cut...




6. Re: Ler dados em um arquivo de texto [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 27/02/2013 - 09:21h

O problema é que todos viram trecho 01 como uma coisa só... no entanto são duas coisas diferentes

trecho é o terceiro campo
01 é o quarto campo..

A falta de observação de pequenos detalhes fez com que uma sonda de milhões de dólares se perdesse no espaço.
Veja bem:

Preciso criar um outro arquivo .txt que contenha

Info 01: 6.400
Info 02: 120.795
Info 03: Trecho 01
Info 04: 125.00
Info 05: 3234.12
Info 06: 0.30


Portanto, pelo que nos foi apresentado, "Info 03" é composto de uma única string alfanumérica que pode conter o caracter SPACE, e portanto não se pode usar tal caracter como delimitador.
Tampouco se pode cortar a string pela contagem de caracteres em um campo, visto que um deles já se mostra mais curto que os demais:

6.400 120.795 Trecho 01 125.00 3234.12 0.30
7.900 7620.160 Trecho 02 125.00 3234.12 0.30




7. Re: Ler dados em um arquivo de texto [RESOLVIDO]

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 27/02/2013 - 10:27h

Vê se assim serve?

awk '{ printf "Info 01: %s\nInfo 02: %s\nInfo 03: %s%3s\nInfo 04: %s\nInfo 05: %s\nInfo 06: %s\n",$1,$2,$3,$4,$5,$6,$7 }' texto.txt



8. Re: Ler dados em um arquivo de texto [RESOLVIDO]

Whilamys Pontes
whilpontes

(usa openSUSE)

Enviado em 27/02/2013 - 17:31h

Pessoal,

Muito obrigado pelo suporte de todos.

Aprendi muito sobre o awk e o cut.
Meu grande problema era não conhecer os comandos. Sou um aventureiro ainda.

Todas as dicas foram muito válida.

Muito obrigado,

Abraços WhilPontes






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts