|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Vladimir Y. Serov 2:5020/400 30 Apr 2003 17:46:31 To : Igor S.Kozhukhov Subject : Re: awk -------------------------------------------------------------------------------- Igor S.Kozhukhov пишет: > можно ли на awk рабоать с бинарными операциями - сдвиг влево побитовый или > вправо? > что-то в мануле не нашел ? Hет. > мне нужно на ip наложить маску подсети и сравнить с исходным значением > или посоветйте как можно решить енту проблему ... Примерно так: awk ' function binary (dec, top) { top=int(top/2) if (top==0) return "" b="" int(dec/top) new=dec%top return b binary(new,top) } function bin2ip(bin, i, k, ip, sep) { if(length(bin)!=32 || bin!~/^[01]+$/) exit(1) ip="" for (k=0; k<4; k++) { num=0; for (i=0; i<8; i++) { num*=2 num+=substr(bin,k*8+i+1,1) } ip=ip (k?".":"") num } return ip } function ip2bin(ip, mask, quad, i, bin) { if(split(ip,quad,/\./)!=4) exit(1) bin="" for(i=1;i<=4;i++) { quad[i]=int(quad[i]) if(quad[i]>255 || quad[i]<0) exit(1) bin=bin binary(quad[i],256) } return bin } function netbin(bin, mask) { bin=sprintf("%-32.32s",substr(bin,1,mask)) gsub(/ /,"0",bin) return bin } function netaddr(ip, mask) { mask=int(mask) if(mask>32 || mask<0) exit(1) return bin2ip(netbin(ip2bin(ip),mask)) } BEGIN { for (i=0;i<33;i++) print netaddr("192.168.111.255",i) "/" i } ' А при чем тут линукс, кстати? -- Владимир Серов --- ifmail v.2.15dev5 * Origin: Novacor (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/13431603da18e.html, оценка из 5, голосов 10
|