Ler arquivo e tratar linhas [RESOLVIDO]

1. Ler arquivo e tratar linhas [RESOLVIDO]

Tobias Guimaraes
tukaguima

(usa Debian)

Enviado em 04/09/2014 - 16:56h

Boa tarde,

Estou fazendo um shell aqui que lê um arquivo de texto linha por linha
esse arquivo de texto é feito assim :

nome sobrenome 2000
nome sobrenome 2001

e assim vai..

eu to lendo o arquivo assim

#!/bin/bash
while read linha
do

echo $linha

done < teste


Não sei si essa é a melhor maneira de ler o arquivo..

ele me retorna a linha inteira... to a um tempinho pesquisando e não encontrei nada ainda...
eu preciso tratar esse retorno da leitura do arquivo, preciso jogar o "nome sobrenome" em uma variavel e o número em outra..
$nome = "nome_sobrenome"
$numero = 2000

para que eu possa usar essas variaveis em um outro comando..
Como poderia fazer isso ?

Muito Obrigado!


  


2. Re: Ler arquivo e tratar linhas [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 04/09/2014 - 17:21h

Eu faria assim:


#!/bin/bash

while read LINHA; do

NOME=$(echo $LINHA | awk '{print $1"_"$2}')
NUMERO=$(echo $LINHA | awk '{print $3}')

done < teste.txt




3. Re: Ler arquivo e tratar linhas [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/09/2014 - 00:08h

phoemur escreveu:

Eu faria assim:


#!/bin/bash

while read LINHA; do

NOME=$(echo $LINHA | awk '{print $1"_"$2}')
NUMERO=$(echo $LINHA | awk '{print $3}')

done < teste.txt



Outro modo de fazer, que não depende de chamar programas externos, é separar os campos já na leitura.

while read nome sobrenome numero; do
nome_completo="${nome}_${sobrenome}"

# Usa $nome, $sobrenome, $numero e $nome_completo
# ...
# ...
done


Desse modo, se a entrada tiver muitas linhas, a execução será mais rápida.


4. Re: Ler arquivo e tratar linhas [RESOLVIDO]

Tobias Guimaraes
tukaguima

(usa Debian)

Enviado em 09/09/2014 - 17:23h

phoemur escreveu:

Eu faria assim:


#!/bin/bash

while read LINHA; do

NOME=$(echo $LINHA | awk '{print $1"_"$2}')
NUMERO=$(echo $LINHA | awk '{print $3}')

done < teste.txt



Fiz desse mais ou menos desse jeito! consegui realizar o que eu queria !

Muito obrigado!




5. Problema similar

Jonatas da Silva
jonata.dasilva

(usa Ubuntu)

Enviado em 27/03/2016 - 03:47h

Ola estou tentando ler tb um arquivo mais de um log. Só que preciso ler um bloco com 3 linhas e queria separa com doi feito anteriormente.

Gostaria de separar assim:

#!/bin/bash

while read m d h ip_gatway s1 s2 s3 s4;
read s5 s6 ip_i s7;
read ip_e s8 time; do

mes="${m}"
dia="${d}"
ip_interno="${ip_i}"
ip_externo="${ip_e}"
duracao="${time}"
echo $mes
echo $dia
echo $ip_interno
echo $ip_externo
echo $duracao
done < Logs.txt

Tudo que não foi coletado são coisa que não quero usar, segue exemplo de um log parecido:

Mar 21 20:50:19 10.1.1.2 %ASA-0-30: Teardown dynamic TCP
translation from academ:192.168.xxx.xx/59656 to
outside:200.128.xx.xx/61684 duration 0:00:30

Mar 21 21:10:10 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xx/42893 to
outside:200.128.xx.xx/42748 duration 0:05:00

Mar 21 21:31:22 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xx/46170 to
outside:200.128.xx.xx/49370 duration 0:04:00

Mar 21 21:46:34 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xxx/26608 to
outside:200.128.xx.xx/2961 duration 0:11:00

Mar 21 21:50:19 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xxx/26523 to
outside:200.128.xx.xx/61684 duration 0:11:00
Sendo que existirá varios blocos desses no arquivo. O código acima funciona para o primeiro bloco, agora para os outros já não bate. Alguém sabe como proceder?



6. Re: Ler arquivo e tratar linhas [RESOLVIDO]

Cleverson Nahum
cleversonahum

(usa Arch Linux)

Enviado em 13/10/2016 - 15:52h

jonata.dasilva escreveu:

Ola estou tentando ler tb um arquivo mais de um log. Só que preciso ler um bloco com 3 linhas e queria separa com doi feito anteriormente.

Gostaria de separar assim:

#!/bin/bash

while read m d h ip_gatway s1 s2 s3 s4;
read s5 s6 ip_i s7;
read ip_e s8 time; do

mes="${m}"
dia="${d}"
ip_interno="${ip_i}"
ip_externo="${ip_e}"
duracao="${time}"
echo $mes
echo $dia
echo $ip_interno
echo $ip_externo
echo $duracao
done < Logs.txt

Tudo que não foi coletado são coisa que não quero usar, segue exemplo de um log parecido:

Mar 21 20:50:19 10.1.1.2 %ASA-0-30: Teardown dynamic TCP
translation from academ:192.168.xxx.xx/59656 to
outside:200.128.xx.xx/61684 duration 0:00:30

Mar 21 21:10:10 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xx/42893 to
outside:200.128.xx.xx/42748 duration 0:05:00

Mar 21 21:31:22 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xx/46170 to
outside:200.128.xx.xx/49370 duration 0:04:00

Mar 21 21:46:34 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xxx/26608 to
outside:200.128.xx.xx/2961 duration 0:11:00

Mar 21 21:50:19 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xxx/26523 to
outside:200.128.xx.xx/61684 duration 0:11:00
Sendo que existirá varios blocos desses no arquivo. O código acima funciona para o primeiro bloco, agora para os outros já não bate. Alguém sabe como proceder?

Leia esse artigo: https://www.vivaolinux.com.br/dica/Awk-Uma-poderosa-ferramenta-de-analise , talvez te ajude



7. Re: Ler arquivo e tratar linhas [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/10/2016 - 19:22h

jonata.dasilva escreveu:

Ola estou tentando ler tb um arquivo mais de um log. Só que preciso ler um bloco com 3 linhas e queria separa com doi feito anteriormente.

Gostaria de separar assim:

#!/bin/bash

while read m d h ip_gatway s1 s2 s3 s4;
read s5 s6 ip_i s7;
read ip_e s8 time; do

mes="${m}"
dia="${d}"
ip_interno="${ip_i}"
ip_externo="${ip_e}"
duracao="${time}"
echo $mes
echo $dia
echo $ip_interno
echo $ip_externo
echo $duracao
done < Logs.txt

Tudo que não foi coletado são coisa que não quero usar, segue exemplo de um log parecido:

Mar 21 20:50:19 10.1.1.2 %ASA-0-30: Teardown dynamic TCP
translation from academ:192.168.xxx.xx/59656 to
outside:200.128.xx.xx/61684 duration 0:00:30

Mar 21 21:10:10 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xx/42893 to
outside:200.128.xx.xx/42748 duration 0:05:00

Mar 21 21:31:22 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xx/46170 to
outside:200.128.xx.xx/49370 duration 0:04:00

Mar 21 21:46:34 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xxx/26608 to
outside:200.128.xx.xx/2961 duration 0:11:00

Mar 21 21:50:19 10.1.1.2 %ASA-0-305012: Teardown dynamic TCP
translation from academi:192.168.xxx.xxx/26523 to
outside:200.128.xx.xx/61684 duration 0:11:00
Sendo que existirá varios blocos desses no arquivo. O código acima funciona para o primeiro bloco, agora para os outros já não bate. Alguém sabe como proceder?

-------------------------------------------------
Boa Noite, jonata.dasilva.
Abra um "tópico", tenho a solução . . .

No aguardo,
Marcelo Oliver








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts