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

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

Re: [shell-script] Ordenar base por campo


From: MrBiTs
Subject: Re: [shell-script] Ordenar base por campo
Date: Thu, 13 May 2010 07:52:05 -0300
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100423 Lightning/1.0b1 Thunderbird/3.0.4

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

> Boa noite pessoal!
> 
> A missão agora é ordenar a uma base de dados usando como referencia o 
> valor de um campo em especifico no caso esse campo é o 6° separado por 
> ";" e contém endereços IPs de uma mesma rede.
> O formato da base é o seguinte:
> nome;mac;local;so;gw;ip;status;comentario;
> 
> O exemplo da base e o comando que usei para solucionar está em 
> http://pastebin.com/xX70UNC7

Essas crianças crescem TÃO rápido !
Parabéns por usar o paste-bin para mostrar seus códigos.

Sua solução, embora elegante, não serve para todos os casos. Se você tiver em 
sua lista IPs do tipo

8.7.6.5
10.2.50.51
10.11.42.67
10.101.2.137
10.20.250.255

a lista aparecerá ordenada exatamente como está acima, e isso está errado. Pela 
lógica, 10.20.250.255 está numa rede anterior a
10.101.2.137.

A melhor (se não for a única) maneira de se ordenar IPs é transformando-os em 
inteiros longos.

Um endereço IP é um número de 32 bits. Ele é geralmente escrito na notação 
"dotted quad": w.x.y.z. Cada parte do IP é ela vezes 256
numa potência N, onde N é a posição da parte, começando da direita para a 
esquerda em 0. Então, temos (w * 256^3), (x * 256^2), (y *
256^1) e (z * 256^0). Somando os resultados dessas potenciações e 
multiplicações, você tem um inteiro longo representando o IP.
Facilitando sua vida, para converter um IP para a base 10, corte cada octeto e 
calcule-os assim: w * 16777216 + x * 65536 + y * 256 + z.

Gere esse campo, ordene por ele e elimine-o da listagem. Você vai precisar de 
mais algumas linhas de código, mas pelo menos os
resultados saem corretos.

Acho que o código em http://pastebin.com/wV6S7a9p faz o truque.

A listagem que usei para testes está junto, como comentário no script

- -- 

Um abraço

.0. MrBiTs - address@hidden
..0 GnuPG  - 
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x6EC818FC2B3CA5AB
000 http://www.mrbits.com.br


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQEcBAEBCAAGBQJL69nVAAoJEG7IGPwrPKWrFr0H/Rg8u8WFvStFs2TLZV2h1U0Y
8TPERPifa9cLS/gJHjo291Iwu+qoBPkkQzCOObJGyIg+Nf/ghlF7RhZxB95AX+Gr
9RF45Gd0zEVIRVlc+E7929XyFWcnGb7c4bSy/vAIM8TYgM5r7e7u7SCsrz7uqAk6
6EUtlG7TD6s7uOsKBZNIGi4qXPZC7nBaTKGITuH5EeODgwM/a6cW+6zAk5fbtLwJ
dwrVwB50223XZCgqOd/22o4V8Q2z0qTHjY7lWuCewnL8meFi9LagltvAFLE+Nbf1
rsUxiR2wa3dhzUSRBUZ05pXv/cQupkPpcf4XgU7ZjmfIgPkX7b1EZGSrRfo3GNA=
=cyEN
-----END PGP SIGNATURE-----


reply via email to

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