shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] AWK - Formatação de dados


From: phfbettega
Subject: Re: [shell-script] AWK - Formatação de dados
Date: Thu, 7 Dec 2017 13:25:56 -0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0

A saída atende o que o andrelucio pediu :)
>  > > E extraio os dados abaixo com o seguinte comando:
>  > >
>  > >
>  > > awk 'gsub("SA:|dB","") {print $1","$16","$10","$2}' unknow.txt
>  > >
>  > >
>  > > city-country-1,Unknown),-84,17:38:29.291991
>  > >
>  > > city-country-2,68:c4:4d:60:8d:48,-79,17:38:33.183062
>  > >
>  > > city-country-3,67:c4:d5:60:8f:38,-79,17:00.22.183062
>  > >
>  > >
>  > > O problema é que no campo 16, eu preciso que somente venha o MAC, e
>  > > que não aparece  um resultado diferente, como o Unknown) na saída
>  > > acima. Preciso que saia dessa forma:
>  > >
>  > >
>  > > city-country-2,68:c4:4d:60:8d:48,-79,17:38:33.183062
>  > >
>  > > city-country-3,67:c4:d5:60:8f:38,-79,17:00.22.183062

Mas tem que ser com awk.
>  > > Ps: Preciso que seja feito através do awk.

Para imprimir todas as linhas, testa o campo 16, se não contiver um mac,
substitui por alguma string, ou por nada.
awk  '$16 !~ /([a-f0-9]{2}:){5}[a-f0-9]{2}/ {$16="xx:xx:xx:xx:xx:xx"}
{gsub("SA:|dB",""); print $1","$16","$10","$2}' unknow.txt

Pessoal, declarar um dos campos do awk como variável funciona,
mas isso é um uso comum?

Abraços Paulo

On 07-12-2017 12:07, Andre Lopes da Silva address@hidden [shell-script] wrote:
Huuum, eu acho que essa solução do Paulo resolve o fato de não mostrar
se não for MAC Address, mas ele acabará omitindo a informação das
linhas que não seriam MAC Address, o que pode ser informação importante.

Eu percebi que suas linhas acabam quebrando por conta de terem
quantidades de espaços diferentes... pra ficar mais fácil de
visualizar isso, estou anexando um screenshot (Awkdesalinhado)
circulando pra você onde ocorre o problema... Note que pro seu caso, Na
primeira linha, a informação que você quer é a da casa "20" (já que
esse a informação " (oui Unknown) " aparece duas vezes e isso te quebra
a formatação acrescentando 4 campos antes da informação que você precisa
(por isso na primeira linha é 20).

Eu não sei te dizer como você vai fazer isso com AWK pois minha
experiência não me permite ainda... O que eu faria no meu pouco
conhecimento seria tentar tratar essa linha antes do awk para que os
"SA:ma:ca:dd:re:ss:es" ficassem alinhados de alguma forma primeiro. Eu
chutaria que SED seria seu amigo nessa hora, pra "sumir" com tudo o
que fica entre "BSSID:" e "SA:" (Trocando todo esse miolo por "SA:"), o
que te resultaria com o SA:macaddress" na casa "13" pro AWK.

Me corrijam pq posso estar errado, mas algo tipo "sed 's/BSSID.*SA/SA/'"
resolveria?

Se for isso, fazer um

"sed 's/BSSID.*SA/SA/' unknown.txt | awk 'gsub("SA:|dB","") {print
$1","$14","$10","$2}'"

OBS: Note que não é mais "1, 16, 10, 2", virou "1, 14, 10, 2"

Do mesmo modo que essa linha ficou desalinhada, é bom você ver se não
tem outros casos de "desalinhamento" no teu arquivo antes de brincar de
achar linhas e colunas com awk, pra não te dar xabú, heheheh

Abraços

Em Wed, 6 Dec 2017 19:52:09 -0200
"address@hidden [shell-script]"
<address@hidden> escreveu:

 > Olá andrelucio, teste o campo do mac, se é realmente um mac.
 >
 > awk 'gsub("SA:|dB","") {if ( $16 ~ /^([a-f0-9]{2}:){5}[a-f0-9]{2}$/ )
 > print $1","$16","$10","$2}' unknow.txt
 >
 > Abraços Paulo
 >
 > On 06-12-2017 18:46, address@hidden [shell-script] wrote:
 > > Opa, pessoal.
 > >
 > >
 > > Estou com a seguinte demanda. Eu tenho um arquivo que me envia a
 > > saída abaixo:
 > >
 > >
 > > city-country-1 17:38:29.291991 26205766340us tsft 1.0 Mb/s 2412 MHz
 > > 11b -84dB SIGNAL [bit 29] BSSID:4c:5e:0c:b9:69:59 (oui Unknown)
 > > DA:4c:5e:0c:b9:69:59 (oui Unknown) SA:80:58:f8:81:29:89 (oui
 > > Unknown) Packet Request (Network) [1.0 2.0 5.5 11.0 Mbit]
 > >
 > > city-country-2 17:38:33.183062 26209656603us tsft 1.0 Mb/s 2412 MHz
 > > 11b -79dB SIGNAL [bit 29] BSSID:Broadcast DA:Broadcast
 > > SA:68:c4:4d:60:8d:48 (oui Unknown) Packet Request () [1.0 2.0 5.5
 > > 11.0 Mbit]
 > >
 > > city-country-3 17:00.22.183062 26209656603us tsft 1.0 Mb/s 2412 MHz
 > > 11b -79dB SIGNAL [bit 29] BSSID:Broadcast DA:Broadcast
 > > SA:67:c4:d5:60:8f:38 (oui Unknown) Packet Request () [1.0 2.0 5.5
 > > 11.0 Mbit]
 > >
 > >
 > > E extraio os dados abaixo com o seguinte comando:
 > >
 > >
 > > awk 'gsub("SA:|dB","") {print $1","$16","$10","$2}' unknow.txt
 > >
 > >
 > > city-country-1,Unknown),-84,17:38:29.291991
 > >
 > > city-country-2,68:c4:4d:60:8d:48,-79,17:38:33.183062
 > >
 > > city-country-3,67:c4:d5:60:8f:38,-79,17:00.22.183062
 > >
 > >
 > > O problema é que no campo 16, eu preciso que somente venha o MAC, e
 > > que não aparece  um resultado diferente, como o Unknown) na saída
 > > acima. Preciso que saia dessa forma:
 > >
 > >
 > > city-country-2,68:c4:4d:60:8d:48,-79,17:38:33.183062
 > >
 > > city-country-3,67:c4:d5:60:8f:38,-79,17:00.22.183062
 > >
 > >
 > > Ps: Preciso que seja feito através do awk.
 > >
 > >
 > >
 > > Agradeço a ajuda.
 > >
 > >
 > >
 > > ----------------------------------------------------------
 > > Enviado por: address@hidden
 > > ----------------------------------------------------------
 > > Responder através da web

--
Andre Lopes da Silva
Técnico em Informática
SI - IME-USP
3091-9891
Sala 131-A

Enviado utilizando Claws Mail
OpenSUSE LEAP 42.3

[As partes desta mensagem que não continham texto foram removidas]


--------------------------------------------------------------------------------------------------------------
Enviado por: Andre Lopes da Silva <address@hidden>
--------------------------------------------------------------------------------------------------------------


reply via email to

[Prev in Thread] Current Thread [Next in Thread]