免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7378 | 回复: 10
打印 上一主题 下一主题

[文本处理] long转ip [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-25 13:29 |只看该作者 |倒序浏览
  1. 0000-00-00 00:00:00     2013-08-25 00:14:39     17      1256256222      4288861521      0       43095   4655    0
  2. 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
}


但是怎么也想不出怎么换。

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
2 [报告]
发表于 2013-08-25 13:36 |只看该作者
本帖最后由 liion631818 于 2013-08-25 15:09 编辑

不好转,22222,222.22 22.222怎么判断??
下面的代码是前面的ip尽可能的长

  1. awk '{
  2.         len=length($0);
  3.         if(len>12||len<4)
  4.                 next;
  5.         s = 1;
  6.         dot="."
  7.                 cnt=3
  8.                 e = 3
  9.         while(1)
  10.         {
  11.             if(cnt==-1)
  12.                                 break;
  13.             if(cnt==0)
  14.                 dot=""
  15.                         if(len-s-e<cnt-1)
  16.                         {
  17.                                 e--;
  18.                                 continue;
  19.                         }
  20.             ip = substr($0, s, e);
  21.             if( strtonum(ip) <= 255 )
  22.             {
  23.                 printf ip dot
  24.                                 cnt--
  25.                                 s=s+e
  26.                                 e=3
  27.             }
  28.             else
  29.             {
  30.                     e--
  31.             }
  32.                
  33.         }
  34.         printf "\n"
  35. }' 1.txt
复制代码

论坛徽章:
2
辰龙
日期:2013-09-24 12:26:05卯兔
日期:2013-09-24 12:27:37
3 [报告]
发表于 2013-08-26 00:25 |只看该作者
ip&0xff000000 ip&0x00ff0000 ip&0x0000ff00 ip&0xff

论坛徽章:
2
辰龙
日期:2013-09-24 12:26:05卯兔
日期:2013-09-24 12:27:37
4 [报告]
发表于 2013-08-26 00:30 |只看该作者
  1. 从openwrt /usr/lib/common.awk 看到的
  2. function ip2int(ip) {
  3.         for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x])
  4.         return ret
  5. }

  6. function int2ip(ip,ret,x) {
  7.         ret=and(ip,255)
  8.         ip=rshift(ip,8)
  9.         for(;x<3;ret=and(ip,255)"."ret,ip=rshift(ip,8),x++);
  10.         return ret
  11. }
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
5 [报告]
发表于 2013-08-26 10:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
6 [报告]
发表于 2013-08-26 10:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
7 [报告]
发表于 2013-08-26 10:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
8 [报告]
发表于 2013-08-26 13:09 |只看该作者
回复 7# zooyo


    唉,被你发现了,就是好久没搞了又来练练手咯。
工作完全接触不到这个

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
9 [报告]
发表于 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) }

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
10 [报告]
发表于 2013-08-26 13:52 |只看该作者
回复 6# zooyo


    原来ip和数值之间是这么转换的啊,把它当字符串了。理解严重偏差。学习下:

  1. function IP2Long(){
  2.         local LNET=0
  3.         IFS="."
  4.         local IP=( $1 )
  5.         (( LNET=(${IP[0]}<<24)|(${IP[1]}<<16)|(${IP[2]}<<8)|(${IP[3]}) ))
  6.         echo $LNET

  7. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP