You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用awk实现10位手机号与短数字的后缀匹配

AWK实现手机号后缀匹配解决方案

假设你的Table1数据存储在table1.txt,Table2数据存储在table2.txt,可以使用以下AWK脚本实现需求:

完整脚本(可读性优先)

创建名为match_mobile.awk的文件,内容如下:

# 读取Table1的手机号,存入数组
NR == FNR {
    # 跳过表头行
    if (NR > 1) {
        mobiles[$0] = $0
    }
    next
}

# 输出结果表头
FNR == 1 {
    print "display\tOutput"
    next
}

# 处理Table2的每个display字段
{
    display = $0
    # 获取当前display的长度
    len = length(display)
    # 遍历所有手机号,匹配后缀
    for (mobile in mobiles) {
        # 截取手机号的后len位进行匹配
        if (substr(mobile, 11 - len) == display) {
            # 按tab分隔输出结果
            printf "%s\t%s\n", display, mobile
            # 找到匹配后退出循环(假设唯一匹配)
            break
        }
    }
}

运行命令:

awk -f match_mobile.awk table1.txt table2.txt

单行精简命令

如果需要直接在终端执行,可使用单行版本:

awk 'NR==FNR{if(NR>1)mobiles[$0]=$0;next}FNR==1{print "display\tOutput";next}{len=length($0);for(m in mobiles)if(substr(m,11-len)==$0){printf "%s\t%s\n",$0,m;break}}' table1.txt table2.txt

关键逻辑说明

  1. 读取Table1数据:利用NR==FNR判断当前处理的是第一个输入文件(Table1),跳过表头后将所有10位手机号存入数组mobiles。
  2. 输出结果表头:处理第二个文件(Table2)的第一行时,输出指定的表头display\tOutput。
  3. 后缀匹配:对Table2的每个display字段,计算其长度len,然后截取手机号的后len位(通过substr(mobile, 11 - len)实现,因为10位手机号的起始位置为10 - len + 1 = 11 - len),与display字段比对,匹配成功则输出结果。

注意事项

  • 确保Table1中的手机号均为严格10位数字,无额外字符;Table2中的display字段均为纯数字。
  • 脚本默认每个display字段仅存在一个匹配的手机号,若存在多个匹配,可去掉break语句以输出所有匹配结果。
  • 输出使用tab分隔,可根据需求修改printf中的分隔符(比如替换为空格)。

内容的提问来源于stack exchange,提问作者Mahendra Seth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:05:41