calcule aritmetice cu IP-uri (oneliner)

Request primit ceva mai devreme: "cum se face in bash (nu in perl) mod(inet_aton(<ip-ul meu>),10) ? adica vreau rezultatul impartirii cu 10 al ip-ului ala". Fara sa intru in detalii la ce era nevoie de asa ceva, uite onelinerul (se putea altfel?):

IP_ADDR=192.168.1.1; ( echo -n "ibase=16 ; " ; printf '%02X' ${IP_ADDR//./ }; echo "%A") | bc

Ce face? Transforma ip-ul in hexazecimal si face socoteala in hexa (ibase=16 ii spune lui bc ca o sa introduc numere in baza 16, obase ramane implicit 10; %A inseamna restul impartirii la A, care e 10-le cerut initial exprimat in ibase).

Conversia in hexadecimal se face via printf %02X care transforma argumentele primite in 2 cifre hexa, iar scamatoria aia de bash face search-replace global din punct in spatiu (ca sa vada printf-ul 4 argumente).

HTH, etc...

2 Responses to “calcule aritmetice cu IP-uri (oneliner)”

  1. paispe Says:

    Si totusi, la ce era nevoie de asa ceva?

  2. admin Says:

    E mai complicat tot setupul, dar pe scurt vreau sa balansez multe ip-uri in grupari relativ echilibrate pentru ratiuni de monitoring si alte traznai. Ma rog, chiar nu conteaza :)