Tiago,

echo '0a0a2200/ffffff00' | awk  --non-decimal-data -F '/' 'function
x(s,p){ return sprintf("%d","0x"z(s,p)) } function z(s,p){ return
substr(s,p,2) } function y(s){ return
x(s,1)"."x(s,3)"."x(s,5)"."x(s,7) }  { print y($1),"/",y($2) }'

Funcionou perfeitamente, só que depois de analisar melhor, a segunda
parte (ffffff00), tenho que converter de hexadecimal para bits, na
verdade preciso saber quantos bits tem nesse hexadecimal.

80000000 = 1000 0000 0000 0000 0000 0000 0000 0000 = 1
c0000000 = 1100 0000 0000 0000 0000 0000 0000 0000 = 2
e0000000 = 1110 0000 0000 0000 0000 0000 0000 0000 = 3
f0000000 = 1111 0000 0000 0000 0000 0000 0000 0000 = 4
f8000000 = 1111 1000 0000 0000 0000 0000 0000 0000 = 5
fc000000 = 1111 1100 0000 0000 0000 0000 0000 0000 = 6
fe000000 = 1111 1110 0000 0000 0000 0000 0000 0000 = 7
ff000000 = 1111 1111 0000 0000 0000 0000 0000 0000 = 8
ff800000 = 1111 1111 1000 0000 0000 0000 0000 0000 = 9
ffc00000 = 1111 1111 1100 0000 0000 0000 0000 0000 = 10
ffe00000 = 1111 1111 1110 0000 0000 0000 0000 0000 = 11
fff00000 = 1111 1111 1111 0000 0000 0000 0000 0000 = 12
fff80000 = 1111 1111 1111 1000 0000 0000 0000 0000 = 13
fffc0000 = 1111 1111 1111 1100 0000 0000 0000 0000 = 14
fffe0000 = 1111 1111 1111 1110 0000 0000 0000 0000 = 15
ffff0000 = 1111 1111 1111 1111 0000 0000 0000 0000 = 16
ffff8000 = 1111 1111 1111 1111 1000 0000 0000 0000 = 17
ffffc000 = 1111 1111 1111 1111 1100 0000 0000 0000 = 18
ffffe000 = 1111 1111 1111 1111 1110 0000 0000 0000 = 19
fffff000 = 1111 1111 1111 1111 1111 0000 0000 0000 = 20
fffff800 = 1111 1111 1111 1111 1111 1000 0000 0000 = 21
fffffc00 = 1111 1111 1111 1111 1111 1100 0000 0000 = 22
fffffe00 = 1111 1111 1111 1111 1111 1110 0000 0000 = 23
ffffff00 = 1111 1111 1111 1111 1111 1111 0000 0000 = 24
ffffff80 = 1111 1111 1111 1111 1111 1111 1000 0000 = 25
ffffffc0 = 1111 1111 1111 1111 1111 1111 1100 0000 = 26
ffffffe0 = 1111 1111 1111 1111 1111 1111 1110 0000 = 27
fffffff0 = 1111 1111 1111 1111 1111 1111 1111 0000 = 28
fffffff8 = 1111 1111 1111 1111 1111 1111 1111 1000 = 29
fffffffc = 1111 1111 1111 1111 1111 1111 1111 1100 = 30
fffffffe = 1111 1111 1111 1111 1111 1111 1111 1110 = 31
ffffffff = 1111 1111 1111 1111 1111 1111 1111 1111 = 32

Exemplo de entrada e saida.. (sem espaços em branco na reposta)

$ echo 0a0a2200/ffffff00 | awk ...
10.10.34.0/24

$ echo 0a0a2200/ffff0000 | awk ...
10.10.34.0/16

Uma lógica é somar... f=4, e=3, c=2, 8=1


On 7/27/06, Tiago Barcellos Peczenyj <[EMAIL PROTECTED]> wrote:
> pipe? sim
>
> echo '0a0a2200/ffffff00' | awk  --non-decimal-data -F '/' 'function
> x(s,p){ return sprintf("%d","0x"z(s,p)) } function z(s,p){ return
> substr(s,p,2) } function y(s){ return
> x(s,1)"."x(s,3)"."x(s,5)"."x(s,7) }  { print y($1),"/",y($2) }'
>

-- 
Reinaldo Carvalho
Debian Sarge 3.1 - Linux User: #238310
Prodepa - [EMAIL PROTECTED]


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a