关于如何在海量手机号中刷选出想要的手机号

 

关于如何在海量手机号中刷选出想要的手机号

一.业务场景需求

现在有海量手机号,如何快速筛选出固定地区的手机号,现需筛选出所有A地区的手机号,
根据规定,手机号前七位数决定手机的地区。前七位数为手机号地区号段,A地区有3000个号段,现在海量手机号数目3000,0000个

二.解决思路

1.将所有号段生成带标记的数组,(数组即为存放数据的地方,可以想象为杯子,有多少个号段就有多少个杯子),每个号段拥有一个数组,此时数组为空,
2.将所有手机号前七位与数组号段匹配,匹配成功则将手机号丢入该数组
3.输出筛选过的不同地区的数组(每个数组中存放的是同一个地区的号码在同一个数组中)

关于哈希,散列的含义
哈希算法一般用于快速查找和加密算法。
哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。

三.业务逻辑实现

使用awk为例
生成两个文件a和b

a中放入5个手机号
18119628342
17319319626
15645673456
18396264567 17634562378 b中放入手机号号段 1731931 1564567 1811962 1839626 1763456 第一步:将手机号号段生成五个数组(杯子),初始化这些数组 第二步:将手机号前七位截取和五个数组进行匹配,若匹配成功则将该手机号放入数组 第三步:打印出每个数组的内容 
awk -f
#运行前
BEGIN{
  print("start!-------")
  print("开始读取号段文件")
}
#运行中
{
  if(NR==FNR){
    #这是在第一个文件
    printf "%6s \n",$0 seg[$0]=""//将号段创建为数组,并将每个数组置空初始态 } else{ #这是第二个文件 //substr(s,p,n)返回字符串s中从p开始长度为n的后缀部分 head =substr($0,0,7) if(head in seg){ seg[head]=seg[head]"\n"$0 } } #运行后 END{ print("过滤后的号码结果列表为:") for(i in seg){ print seg[i] "\n";//i为每个数组的下标标识 } printf "End:.........\n" }

猜你喜欢

转载自www.cnblogs.com/shuia/p/9300234.html