免费注册 查看新帖 |

Chinaunix

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

求助--号码段汇总 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-14 10:12 |只看该作者 |倒序浏览
20可用积分
有很多文件里面记录的是一些7位数的号码段,比如:
[lize@Fedora ~]$ cat NO_1.txt
1551000 1551001 1551002 1551003 1551004 1551005 1551006 1551007 1551008 1551009 1551010 1551011 1551012 1551013 1551014 1551015 1551016 1551017 1551018 1551019 1551020 1551021 1551022 1551023 1551024 1551025 1551026 1551027 1551028 1551029

要求:
1)7位数的号码段,如果有从0依次递增到9的,就汇总为一个6位数号码段
2)其他无法汇总的,筛选出来,保留

比如 NO_1.txt 的7位数号码段汇总成
155100 155101 155102  三个号码段

求shell脚本,或者awk,prel 脚本的实现方法,谢谢!(以NO_2.txt为例,来实现)

[lize@Fedora ~]$ cat NO_2.txt
1300000 1300010 1300011 1300045 1300046 1300047 1300048 1300049 1300100 1300101 1300102 1300103 1300104 1300105 1300106 1300107 1300108 1300109 1300110 1300111 1300112 1300113 1300114 1300115 1300116 1300117 1300118 1300119 1300120 1300121 1300122 1300123 1300124 1300125 1300126 1300127 1300128 1300129 1300190 1300191 1300192 1300193 1300194 1300195 1300196 1300197 1300198 1300199 1301006 1301007 1301008 1301009 1301010 1301011 1301012 1301019 1301100 1301101 1301102 1301103 1301104 1301105 1301106 1301107 1301108 1301109 1301110 1301111 1301112 1301113 1301114 1301115 1301116 1301117 1301118 1301119 1301120 1301121 1301122 1301123 1301124 1301125 1301126 1301127 1301128 1301129 1301180 1301181 1301182 1301183 1301184 1301185 1301186 1301187 1301188 1301189 1302000 1302001 1302002 1302003 1302004 1302005 1302006 1302007 1302008 1302009 1302100 1302101 1302102 1302103 1302104 1302105 1302106 1302107 1302108 1302109 1302110 1302111 1302112 1302113 1302114 1302115 1302116 1302117 1302118 1302119 1302120 1302121 1302122 1302123 1302124 1302125 1302126 1302127 1302128 1302129 1302190 1302191 1302192 1302193 1302194 1302195 1302196 1302197 1302198 1302199 1303100 1303101 1303102 1303103 1303104 1303105 1303106 1303107 1303108 1303109 1303110 1303111 1303112 1303113 1303114 1303115 1303116 1303117 1303118 1303119 1304100 1304101 1304102 1304103 1304104 1304105 1304106 1304107 1304108 1304109 1304110 1304111 1304112 1304113 1304114 1304115 1304116 1304117 1304118 1304119 1304120 1304121 1304122 1304123 1304124 1304125 1304126 1304127 1304128 1304129 1305100 1305101 1305102 1305103 1305104 1305105 1305106 1305107 1305108 1305109 1305110 1305111 1305112 1305113 1305114 1305115 1305116 1305117 1305118 1305119 1305120 1305121 1305122 1305123 1305124 1305125 1305126 1305127 1305128 1305129 1305130 1305131 1305132 1305133 1305134 1305135 1305136 1305137 1305138 1305139 1305140 1305141 1305142 1305143 1305144 1305145 1305146 1305147 1305148 1305149 1305150 1305151 1305152 1305153 1305154 1305155 1305156 1305157 1305158 1305159 1305160 1305161 1305162 1305163 1305164 1305165 1305166 1305167 1305168 1305169 1305170 1305171 1305172 1305173 1305174 1305175 1305176 1305177 1305178 1305179 1305180 1305181 1305182 1305183 1305184 1305185 1305186 1305187 1305188 1305189 1305190 1305191 1305192 1305193 1305194 1305195 1305196 1305197 1305198 1305199 1307010 1307011 1307012 1307013 1307014 1307015 1307016 1307017 1307018 1307019 1307110 1307111 1307112 1307113 1307114 1307115 1307116 1307117 1307118 1307119 1309042
[lize@Fedora ~]$

最佳答案

查看完整内容

6位号码段7位号码结果file17位号码

论坛徽章:
0
2 [报告]
发表于 2009-05-14 10:12 |只看该作者
6位号码段

  1. xargs -n 1 <NO_2.txt|sort|cut -c1-6|uniq -c|awk '$1==10{print $2}' >file1
复制代码

7位号码

  1. xargs -n1 <NO_2.txt| grep  -Fvf file1 -
复制代码


结果file1

  1. 130010
  2. 130011
  3. 130012
  4. 130019
  5. 130110
  6. 130111
  7. 130112
  8. 130118
  9. 130200
  10. 130210
  11. 130211
  12. 130212
  13. 130219
  14. 130310
  15. 130311
  16. 130410
  17. 130411
  18. 130412
  19. 130510
  20. 130511
  21. 130512
  22. 130513
  23. 130514
  24. 130515
  25. 130516
  26. 130517
  27. 130518
  28. 130519
  29. 130701
  30. 130711
复制代码

7位号码

  1. 1300000
  2. 1300010
  3. 1300011
  4. 1300045
  5. 1300046
  6. 1300047
  7. 1300048
  8. 1300049
  9. 1301006
  10. 1301007
  11. 1301008
  12. 1301009
  13. 1301010
  14. 1301011
  15. 1301012
  16. 1301019
  17. 1309042


复制代码

论坛徽章:
0
3 [报告]
发表于 2009-05-14 10:19 |只看该作者
怎么看怎么象联通的。

论坛徽章:
0
4 [报告]
发表于 2009-05-14 10:28 |只看该作者
这样可以吗?

  1. awk -v RS="[ \n]" '{s=substr($0,1,6);a[s]=a[s]" "$0;b[s]++}END{for(i in a) if(b[i]==10) printf i" "; else printf a[i]" "; print ""}' URFILE
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-05-14 10:32 |只看该作者
写错了~

[ 本帖最后由 codfei 于 2009-5-14 10:37 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-05-14 10:53 |只看该作者
不好意思没看清题目,前提文件里没重复号码
awk 'BEGIN{OFS="\n"}{for(i=1;i<NF;i++){print substr($i,1,6);}}' dfile|uniq -c

[ 本帖最后由 justlooks 于 2009-5-14 11:03 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-05-14 10:58 |只看该作者

回复 #5 li2002 的帖子

好像是这个意思

[ 本帖最后由 codfei 于 2009-5-14 11:05 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-05-14 11:07 |只看该作者

回复 #7 codfei 的帖子

哪里不一样?不是分开保存的话就用3楼的

论坛徽章:
0
9 [报告]
发表于 2009-05-14 11:17 |只看该作者

回复 #5 li2002 的帖子

谢谢,你的可以,满足要求!

论坛徽章:
0
10 [报告]
发表于 2009-05-14 11:20 |只看该作者
awk 'BEGIN{RS=" "}{a[substr($1,1,6)]=a[substr($1,1,6)]" "$1}END{for (i in a)print i"--"a}' urfile | sort -k11

没有完全达到要求,当抛砖引玉啦...

130000-- 1300000
130001-- 1300010 1300011
130004-- 1300045 1300046 1300047 1300048 1300049
130100-- 1301006 1301007 1301008 1301009
130101-- 1301010 1301011 1301012 1301019
130904-- 1309042
130010-- 1300100 1300101 1300102 1300103 1300104 1300105 1300106 1300107 1300108 1300109
130011-- 1300110 1300111 1300112 1300113 1300114 1300115 1300116 1300117 1300118 1300119
......
130701-- 1307010 1307011 1307012 1307013 1307014 1307015 1307016 1307017 1307018 1307019
130711-- 1307110 1307111 1307112 1307113 1307114 1307115 1307116 1307117 1307118 1307119
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP