Chinaunix
标题:
long转ip
[打印本页]
作者:
Arthur_
时间:
2013-08-25 13:29
标题:
long转ip
0000-00-00 00:00:00 2013-08-25 00:14:39 17 1256256222 4288861521 0 43095 4655 0
0000-00-00 00:00:00 2013-08-25 00:15:23 6 1256256222 4288588468 0 12069 10778 0
复制代码
其中我想把第6和第7列转成IP地址其它不变, 如何做,我搜到 一个转 ip的 shell:
function long2IP(){
local IP=$1
local NET=
NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
(( IP >>= 8 ))
NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
(( IP >>= 8 ))
NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
(( IP >>= 8 ))
NET="${IP}${NET}"
echo $NET
}
但是怎么也想不出怎么换。
作者:
liion631818
时间:
2013-08-25 13:36
本帖最后由 liion631818 于 2013-08-25 15:09 编辑
不好转,22222,222.22 22.222怎么判断??
下面的代码是前面的ip尽可能的长
awk '{
len=length($0);
if(len>12||len<4)
next;
s = 1;
dot="."
cnt=3
e = 3
while(1)
{
if(cnt==-1)
break;
if(cnt==0)
dot=""
if(len-s-e<cnt-1)
{
e--;
continue;
}
ip = substr($0, s, e);
if( strtonum(ip) <= 255 )
{
printf ip dot
cnt--
s=s+e
e=3
}
else
{
e--
}
}
printf "\n"
}' 1.txt
复制代码
作者:
chenxing0407
时间:
2013-08-26 00:25
ip&0xff000000 ip&0x00ff0000 ip&0x0000ff00 ip&0xff
作者:
chenxing0407
时间:
2013-08-26 00:30
从openwrt /usr/lib/common.awk 看到的
function ip2int(ip) {
for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x])
return ret
}
function int2ip(ip,ret,x) {
ret=and(ip,255)
ip=rshift(ip,8)
for(;x<3;ret=and(ip,255)"."ret,ip=rshift(ip,8),x++);
return ret
}
复制代码
作者:
zooyo
时间:
2013-08-26 10:10
提示:
作者被禁止或删除 内容自动屏蔽
作者:
zooyo
时间:
2013-08-26 10:11
提示:
作者被禁止或删除 内容自动屏蔽
作者:
zooyo
时间:
2013-08-26 10:15
提示:
作者被禁止或删除 内容自动屏蔽
作者:
liion631818
时间:
2013-08-26 13:09
回复
7#
zooyo
唉,被你发现了,就是好久没搞了又来练练手咯。
工作完全接触不到这个
作者:
expert1
时间:
2013-08-26 13:18
回复
1#
Arthur_
awk写个自定义函数
function l2ip(n) {
return int(n/256^3)"."int(n%256^3/256^2)"."int(n%256^2/256)"."int(n%256) }
作者:
liion631818
时间:
2013-08-26 13:52
回复
6#
zooyo
原来ip和数值之间是这么转换的啊,把它当字符串了。理解严重偏差。学习下:
function IP2Long(){
local LNET=0
IFS="."
local IP=( $1 )
(( LNET=(${IP[0]}<<24)|(${IP[1]}<<16)|(${IP[2]}<<8)|(${IP[3]}) ))
echo $LNET
}
复制代码
作者:
zooyo
时间:
2013-08-26 15:03
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2