Tratar dados [RESOLVIDO]

1. Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 20/03/2020 - 10:24h

Bom dia pessoal!

Estou tentando tratar dados extraídos de logs de acesso e o script que fiz abaixo não escreve no arquivo e quando escreve fica tudo embolado.

#!/bin/bash
set -x
input="acessocidadao.txt"
while IFS= read -r line
do
Data=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $1" "$2;}'`
Horario=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $3;}'`
Celular=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $8;}'`
CPF=`cat /home/acessocidadao.txt | grep opt_field2 | awk '{print $7;}' | cut -d '=' -f2`
Email=`cat /home/acessocidadao.txt | grep opt_field3 | awk '{print $7;}' | cut -d '=' -f2`
Nome=`cat /home/acessocidadao.txt | grep Completo | awk '{print $8" "$9" "$10;}' | cut -d '=' -f2`
echo "=====================================================" >> /home/lista_acessocidadao.txt
echo "Nome: $Nome" >> /home/lista_acessocidadao.txt
echo "E-mail: $Email" >> /home/lista_acessocidadao.txt
echo "CPF: $CPF" >> /home/lista_acessocidadao.txt
echo "Celular: $Celular" >> /home/lista_acessocidadao.txt
echo "Conectou em: $Data - $Horario" >> /home/lista_acessocidadao.txt
done < "$input"

Grato desde já!


  


2. MELHOR RESPOSTA

Rogerio
RogerDez

(usa Outra)

Enviado em 21/03/2020 - 12:29h

#!/bin/bash

input="$HOME/test"
out="$HOME/lista_acessocidadao.txt"

while read line; do
Data="$(awk '{print $1" "$2;}' <<<"$line")"
Horario="$(awk '{print $3;}' <<<"$line")"
Celular="$(awk '{print $8;}' <<<"$line")"
CPF="$(awk '{print $7;}' <<<"$line" | cut -d '=' -f2)"
Email="$(awk '{print $7;}' <<<"$line" | cut -d '=' -f2)"
Nome="$(awk '{print $8" "$9" "$10;}' <<<"$line" | cut -d '=' -f2)"

cat <<-! >> "$out"
=====================================================
Nome: $Nome
E-mail: $Email
CPF: $CPF
Celular: $Celular
Conectou em: $Data - $Horario
!
done <"$arq"





3. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 20/03/2020 - 15:35h

Qdo o arquivo acessocidadao.txt possui apenas 4 linhas o script funciona bem com apenas as linhas abaixo, sem for, while ou if:

#!/bin/bash
set -x
input="acessocidadao.txt"
Data=`cat $input | grep opt_field1 | awk '{print $1" "$2;}'`
Horario=`cat $input | grep opt_field1 | awk '{print $3;}'`
Celular=`cat $input | grep opt_field1 | awk '{print $8;}'`
CPF=`cat $input | grep opt_field2 | awk '{print $7;}' | cut -d '=' -f2`
Email=`cat $input | grep opt_field3 | awk '{print $7;}' | cut -d '=' -f2`
Nome=`cat $input | grep Completo | awk '{print $8" "$9" "$10;}' | cut -d '=' -f2`
echo "=====================================================" >> /home/lista_acessocidadao.txt
echo "Nome: $Nome" >> /home/lista_acessocidadao.txt
echo "E-mail: $Email" >> /home/lista_acessocidadao.txt
echo "CPF: $CPF" >> /home/lista_acessocidadao.txt
echo "Celular: $Celular" >> /home/lista_acessocidadao.txt
echo "Conectou em: $Data - $Horario" >> /home/lista_acessocidadao.txt



4. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 20/03/2020 - 15:40h

Segue a saída do script qdo a fonte possui apenas 4 linhas:

=====================================================
Nome: Jjjjj Ppppppp Cccccc
E-mail: 111@111.111.11
CPF: 111.111.111-11
Celular: 11111-1111
Conectou em: Mar 11 - 11:11:11



5. Re: Tratar dados [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/03/2020 - 17:09h


premoli escreveu:

Bom dia pessoal!

Estou tentando tratar dados extraídos de logs de acesso e o script que fiz abaixo não escreve no arquivo e quando escreve fica tudo embolado.

#!/bin/bash
set -x
input="acessocidadao.txt"
while IFS= read -r line
do
Data=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $1" "$2;}'`
Horario=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $3;}'`
Celular=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $8;}'`
CPF=`cat /home/acessocidadao.txt | grep opt_field2 | awk '{print $7;}' | cut -d '=' -f2`
Email=`cat /home/acessocidadao.txt | grep opt_field3 | awk '{print $7;}' | cut -d '=' -f2`
Nome=`cat /home/acessocidadao.txt | grep Completo | awk '{print $8" "$9" "$10;}' | cut -d '=' -f2`
echo "=====================================================" >> /home/lista_acessocidadao.txt
echo "Nome: $Nome" >> /home/lista_acessocidadao.txt
echo "E-mail: $Email" >> /home/lista_acessocidadao.txt
echo "CPF: $CPF" >> /home/lista_acessocidadao.txt
echo "Celular: $Celular" >> /home/lista_acessocidadao.txt
echo "Conectou em: $Data - $Horario" >> /home/lista_acessocidadao.txt
done < "$input"

Grato desde já!

Boa tarde Premoli.
Poste um trecho do arquivo acessocidadao.txt, dessa forma posso ajudar....
no aguardo.
Marcelo Oliver



6. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 21/03/2020 - 10:11h

Segue um trecho do arquivo com os dados mascarados:

Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: opt_field1=(27) 99999-9999
Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: opt_field2=111.111.111-77
Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: opt_field3=fulano.1@dom.ma.in
Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: Nome Completo=Fulano 1
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: opt_field1=(99) 88888-9999
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: opt_field2=888.888.888-71
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: opt_field3=teste@gmail.com
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: Nome Completo=teste da silva 35
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: opt_field1=(27) 99999-2222
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: opt_field2=333.333.333-22
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: opt_field3=fulano.2@gmail.com
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: Nome Completo=Fulano C 2
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: opt_field1=(27) 99929-2222
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: opt_field2=444.444.444-44
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: opt_field3=fulano.3@gmail.com
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: Nome Completo=Fulano C 3
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: opt_field1=(27) 93333-3333
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: opt_field2=444.444.444-42
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: opt_field3=fulano.4@terra.com.br
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: Nome Completo=Fulano 4 Scriptero



7. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 21/03/2020 - 10:13h

msoliver escreveu:


premoli escreveu:

Bom dia pessoal!

Estou tentando tratar dados extraídos de logs de acesso e o script que fiz abaixo não escreve no arquivo e quando escreve fica tudo embolado.

#!/bin/bash
set -x
input="acessocidadao.txt"
while IFS= read -r line
do
Data=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $1" "$2;}'`
Horario=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $3;}'`
Celular=`cat /home/acessocidadao.txt | grep opt_field1 | awk '{print $8;}'`
CPF=`cat /home/acessocidadao.txt | grep opt_field2 | awk '{print $7;}' | cut -d '=' -f2`
Email=`cat /home/acessocidadao.txt | grep opt_field3 | awk '{print $7;}' | cut -d '=' -f2`
Nome=`cat /home/acessocidadao.txt | grep Completo | awk '{print $8" "$9" "$10;}' | cut -d '=' -f2`
echo "=====================================================" >> /home/lista_acessocidadao.txt
echo "Nome: $Nome" >> /home/lista_acessocidadao.txt
echo "E-mail: $Email" >> /home/lista_acessocidadao.txt
echo "CPF: $CPF" >> /home/lista_acessocidadao.txt
echo "Celular: $Celular" >> /home/lista_acessocidadao.txt
echo "Conectou em: $Data - $Horario" >> /home/lista_acessocidadao.txt
done < "$input"

Grato desde já!

Boa tarde Premoli.
Poste um trecho do arquivo acessocidadao.txt, dessa forma posso ajudar....
no aguardo.
Marcelo Oliver



Segue um trecho do arquivo com os dados mascarados:

Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: opt_field1=(27) 99999-9999
Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: opt_field2=111.111.111-77
Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: opt_field3=fulano.1@dom.ma.in
Mar 19 17:00:12 10.160.96.2 ah_auth: aaa: Nome Completo=Fulano 1
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: opt_field1=(99) 88888-9999
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: opt_field2=888.888.888-71
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: opt_field3=teste@gmail.com
Mar 19 17:03:14 10.160.96.2 ah_auth: aaa: Nome Completo=teste da silva 35
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: opt_field1=(27) 99999-2222
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: opt_field2=333.333.333-22
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: opt_field3=fulano.2@gmail.com
Mar 19 17:03:20 10.160.96.136 ah_auth: aaa: Nome Completo=Fulano C 2
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: opt_field1=(27) 99929-2222
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: opt_field2=444.444.444-44
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: opt_field3=fulano.3@gmail.com
Mar 19 17:05:33 10.160.96.136 ah_auth: aaa: Nome Completo=Fulano C 3
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: opt_field1=(27) 93333-3333
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: opt_field2=444.444.444-42
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: opt_field3=fulano.4@terra.com.br
Mar 19 17:06:34 10.160.96.136 ah_auth: aaa: Nome Completo=Fulano 4 Scriptero




8. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 21/03/2020 - 12:23h

Fiz algumas melhorias mas ainda embola os dados quando a fonte possui mais de 4 linhas:

#!/bin/bash
set -x
input="acessocidadao_bkp.txt"
for i in $(egrep --max-count=1 opt_field1 $input | awk '{print $3;}')
do
Data=`cat $input | grep opt_field1 | awk '{print $1" "$2;}'`
Horario=`cat $input | grep opt_field1 | awk '{print $3;}'`
Celular=`cat $input | grep opt_field1 | awk '{print $8;}'`
CPF=`cat $input | grep opt_field2 | awk '{print $7;}' | cut -d '=' -f2`
Email=`cat $input | grep opt_field3 | awk '{print $7;}' | cut -d '=' -f2`
Nome=`cat $input | grep Completo | awk '{print $8" "$9" "$10;}' | cut -d '=' -f2`
echo "=====================================================" >> lista_acessocidadao.txt
echo "Nome: $Nome" >> lista_acessocidadao.txt
echo "E-mail: $Email" >> lista_acessocidadao.txt
echo "CPF: $CPF" >> lista_acessocidadao.txt
echo "Celular: $Celular" >> lista_acessocidadao.txt
echo "Conectou em: $Data - $Horario" >> lista_acessocidadao.txt
done


9. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 21/03/2020 - 12:47h

RogerDez escreveu:

#!/bin/bash

input="$HOME/test"
out="$HOME/lista_acessocidadao.txt"

while read line; do
Data="$(awk '{print $1" "$2;}' <<<"$line")"
Horario="$(awk '{print $3;}' <<<"$line")"
Celular="$(awk '{print $8;}' <<<"$line")"
CPF="$(awk '{print $7;}' <<<"$line" | cut -d '=' -f2)"
Email="$(awk '{print $7;}' <<<"$line" | cut -d '=' -f2)"
Nome="$(awk '{print $8" "$9" "$10;}' <<<"$line" | cut -d '=' -f2)"

cat <<-! >> "$out"
=====================================================
Nome: $Nome
E-mail: $Email
CPF: $CPF
Celular: $Celular
Conectou em: $Data - $Horario
!
done <"$arq"







Demais, muito obrigado, alguns dados vieram em branco mas daqui pra frente sei tratar !! Valeu!!


10. Re: Tratar dados [RESOLVIDO]

Rogerio
RogerDez

(usa Outra)

Enviado em 21/03/2020 - 12:55h

verdade mano, agora que eu vi aqui, pegou uns dados errados..

mas daí tem que ir tratando os dados certinho por cada linha, ver as delimitações para pegar os campos dos dados corretamente.

se precisar de ajuda nisso tb, fala aqui que daí podemos melhorar esses comandos de awk e cut também!


11. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 21/03/2020 - 16:52h

RogerDez escreveu:

verdade mano, agora que eu vi aqui, pegou uns dados errados..

mas daí tem que ir tratando os dados certinho por cada linha, ver as delimitações para pegar os campos dos dados corretamente.

se precisar de ajuda nisso tb, fala aqui que daí podemos melhorar esses comandos de awk e cut também!



Preciso de ajuda sim, ficou mais complicado pra mim, tô apanhando.




12. Re: Tratar dados [RESOLVIDO]

Fábio C Premoli
premoli

(usa Fedora)

Enviado em 21/03/2020 - 18:20h

Se rodar o código abaixo de 4 em 4 linhas funciona, porém não sei como fazer, já tentei for com if head -n 4, for 1 2 3 4, while wc -l, mas nada...

#!/bin/bash
input="acessocidadao.txt"
Data=`cat $input | grep opt_field1 | awk '{print $1" "$2;}'`
Horario=`cat $input | grep opt_field1 | awk '{print $3;}'`
Celular=`cat $input | grep opt_field1 | awk '{print $8;}'`
CPF=`cat $input | grep opt_field2 | awk '{print $7;}' | cut -d '=' -f2`
Email=`cat $input | grep opt_field3 | awk '{print $7;}' | cut -d '=' -f2`
Nome=`cat $input | grep Completo | awk '{print $8" "$9" "$10;}' | cut -d '=' -f2`
echo "=====================================================" >> lista_acessocidadao.txt
echo "Nome: $Nome" >> lista_acessocidadao.txt
echo "E-mail: $Email" >> lista_acessocidadao.txt
echo "CPF: $CPF" >> lista_acessocidadao.txt
echo "Celular: $Celular" >> lista_acessocidadao.txt
echo "Conectou em: $Data - $Horario" >> lista_acessocidadao.txt



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts