[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-----