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

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

Re: [shell-script] Organizando uma lista de IP's com o sort


From: MrBiTS
Subject: Re: [shell-script] Organizando uma lista de IP's com o sort
Date: Sun, 27 Jan 2008 19:03:53 -0200
User-agent: Thunderbird 2.0.0.6 (X11/20071022)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

| Fala Israel,
| dando uma otimizada na idéia do Otávio:
| $ sort -nt . -k 1 -k 2 -k 3 -k 4 temp.txt
| 10.0.5.2
| 10.0.5.3
| 10.0.5.6
| 10.0.5.10
| 10.0.5.16
| Abração,
| Julio

Coisas estranhas acontecendo aqui:

mrbits@rimmon:~$ cat temp.txt
10.0.5.2
10.0.5.3
10.0.5.6
10.0.5.10
10.0.5.16
10.1.2.5
10.2.1.6
10.1.3.1
192.168.1.20
192.168.0.1
192.168.0.53
200.185.6.163

mrbits@rimmon:~$ sort -nt . -k 1 -k 2 -k 3 -k 4 temp.txt
10.0.5.10
10.0.5.16
10.0.5.2
10.0.5.3
10.0.5.6
10.1.2.5
10.1.3.1
10.2.1.6
192.168.0.1
192.168.0.53
192.168.1.20
200.185.6.163

Da mesma forma que ordenar uma data no formato dd/mm/yyyy nos trará problemas, 
eu considero ideal trabalhar com IP em seu formato
longinteger. Já que os dados vêm do MySQL, podemos fazer:

mysql -u root -N -e "SELECT INET_ATON(IP) AS I1, IP AS I2 FROM tabela ORDER BY 
I1" banco

O resultado será algo como

+------------+---------------+
|  167773442 |      10.0.5.2 |
|  167773443 |      10.0.5.3 |
|  167773445 |      10.0.5.5 |
|  167773450 |     10.0.5.10 |
|  167773456 |     10.0.5.16 |
|  167773460 |     10.0.5.20 |
|  167773462 |     10.0.5.22 |
|  167773470 |     10.0.5.30 |
| 3232235521 |   192.168.0.1 |
| 3232235608 |  192.168.0.88 |
| 3232235775 | 192.168.0.255 |
| 3232235876 | 192.168.1.100 |
+------------+---------------+

Foge um pouco do conceito shell-script, mas vale pelo didatismo. Para fazer 
essa transformação em shell, sem utilizar os recursos do
MySQL, a formula para se transformar um IP no formato A.B.C.D em Inteiro Longo é

A * 256^3 + B * 256^2 + C * 256^1 + D =  A * 16777216 + B * 65536 + C * 256 + D

Senão vejamos:

mrbits@rimmon:~$ IP=10.0.5.2 ; IFS=. ; set -x $IP ; expr $1 \* 16777216 + $2 \* 
65536 + $3 \* 256 + $4

e temos

mrbits@rimmon:~$ 167773442

O sort do Otávio funciona, mas já que eu vou ter que fazer uma interação com o 
MySQL, prefiro que ele faça o trabalho por mim.

- --

Um abraço

MrBiTs - address@hidden

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

iD8DBQFHnPG5rDdxWm3R8YYRAoH6AKCP/GECSyt5UMnXvMe3FEzMZbtdBgCfbaae
Igzu7k/h5sBd8zGJnLyCWFM=
=RWma
-----END PGP SIGNATURE-----


reply via email to

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