awk实现IP数字转换
时间:2010-08-16 来源:wood016
awk实现IP数字转换
因工作需要需要将IP地址转成数字形式存储,写了一个awk脚本实现.
源码如下:
mounix.com:~> cat ipconvert
----------------------------------------------------------- #!/bin/bash
#
#
NUM2IP () {
echo |awk -v IPNUM=$1 '{ for (I = 4 ; I >=1; I-- ){
printf (IPNUM % (256^I)- (IPNUM % 256^(I-1)))/256^(I-1)
if (I >1 ) printf "."
}
printf "\n"
}'
} IP2NUM () {
echo $1 |awk 'BEGIN{NUM=0 ; FS="."}{for (I = NF ; I >=1; I-- )
NUM=$I*256^(NF-I)+NUM
}END{printf "%d\n",NUM}'
} if [ $# -ne 2 ] ;then
echo "Usage: $0 -c ip_address or $0 -r num2convert"
exit 1
fi
if [ $1 = "-c" ] ; then
IP2NUM $2
elif [ $1 = "-r" ] ; then
NUM2IP $2
fi
----------------------------------------------------------- mounix.com:~> 运行结果如下: mounix.com:~> sh ipconvert -c 192.168.1.1
3232235777
mounix.com:~> sh ipconvert -r 3232235777
192.168.1.1
mounix.com:~> ==== 原理: IP分成四个字段,每个字段*256的N次方相加得到数字 192.168.1.1
转成数字: 192*256^3 + 168*256^2 + 1*256^1 + 1*256^0=3232235777 3232235777
转成IP: I=4,3,2,1 按以下公式运算. %:取模 ^:求幂 /:除法 (IPNUM % (256^I)- (IPNUM % 256^(I-1)))/256^(I-1)
----------------------------------------------------------- #!/bin/bash
#
#
NUM2IP () {
echo |awk -v IPNUM=$1 '{ for (I = 4 ; I >=1; I-- ){
printf (IPNUM % (256^I)- (IPNUM % 256^(I-1)))/256^(I-1)
if (I >1 ) printf "."
}
printf "\n"
}'
} IP2NUM () {
echo $1 |awk 'BEGIN{NUM=0 ; FS="."}{for (I = NF ; I >=1; I-- )
NUM=$I*256^(NF-I)+NUM
}END{printf "%d\n",NUM}'
} if [ $# -ne 2 ] ;then
echo "Usage: $0 -c ip_address or $0 -r num2convert"
exit 1
fi
if [ $1 = "-c" ] ; then
IP2NUM $2
elif [ $1 = "-r" ] ; then
NUM2IP $2
fi
----------------------------------------------------------- mounix.com:~> 运行结果如下: mounix.com:~> sh ipconvert -c 192.168.1.1
3232235777
mounix.com:~> sh ipconvert -r 3232235777
192.168.1.1
mounix.com:~> ==== 原理: IP分成四个字段,每个字段*256的N次方相加得到数字 192.168.1.1
转成数字: 192*256^3 + 168*256^2 + 1*256^1 + 1*256^0=3232235777 3232235777
转成IP: I=4,3,2,1 按以下公式运算. %:取模 ^:求幂 /:除法 (IPNUM % (256^I)- (IPNUM % 256^(I-1)))/256^(I-1)
相关阅读 更多 +