文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>IP段去重(续)--By lyj

IP段去重(续)--By lyj

时间:2007-11-07  来源:rha030

   一直打算用Shell完成这个问题,经过各路高手的帮助,终于搞定了。处理时避免了将IP转化为一个数字,而是采用quner提出的办法,擦掉IP段之间的"."即可。原来计划一行搞定,后发现难以实现,还是写在脚本里了。主要是因为没有命令可以穿透管道,可能是我还没发现吧。最终使用了临时文件,但我感觉可能是可以不用而实现的。

原题中说IP段是没排序的,所以脚本中需要排序之后再做操作。
测试文件:

#cat file

10.0.0.10 10.0.0.15

10.0.0.1 10.0.0.10

10.0.0.4 10.0.0.6

10.0.0.17 10.0.0.20

程序期望输出为:

10.0.0.1 10.0.0.15

10.0.0.17 10.0.0.20


脚本如下:

# cat Script
awk '{print $1}' file |awk -F. '{printf("%.3d%.3d%.3d%.3d\n",$1,$2,$3,$4)}'| paste - <(awk '{print $2}' file |awk -F. '{printf("%.3d%.3d%.3d%.3d\n",$1,$2,$3,$4)}') | sort | awk '
{
        if ( $1 > max )
        {
                        print min " " max;
                        max=$2;
                        min=$1
        }
        else
        {
                        if ($2 >= max)
                                max=$2
        }
} END{print min " " max} ' |sed '1d' > temp.txt
awk '{print $1}' temp.txt | sed 's/.../&./g;s/\(.*\)$/\1/'|awk -F. '{printf("%d.%d.%d.%d\n",$1,$2,$3,$4)}'|paste - <(awk '{print $2}' temp.txt |sed 's/.../&./g;s/\(.*\)$/\1/'|awk -F. '{printf("%d.%d.%d.%d\n",$1,$2,$3,$4)}')
rm -f temp.txt


程序执行结果正如期望所料,欢迎大家测试。

显然,脚本的速度会比不上John的那个的,不过它要更方便一些。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载