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

使用Unix命令与jq提取JSON中匹配后四位规则的关联ID

实现方案

前提说明

我们预设两类输入的格式如下,你可以根据实际格式调整字段分隔符参数:

  • jq提取后输出的关联ID文件(示例命名customer_rel_ids.txt):每行格式为[客户ID] [关联ID1] [关联ID2] ... [关联IDn],默认空格分隔
  • 待匹配列表文件(示例命名match_list.txt):每行格式为[客户ID] [待匹配关联ID后四位],默认空格分隔

方案1:基于已提取的文本文件过滤(awk实现)

直接用awk做双文件匹配处理,无需额外依赖:

awk '
# 第一步:加载匹配列表,生成客户ID到待匹配后缀集合的映射
NR == FNR {
    match_map[$1][$2] = 1
    next
}
# 第二步:遍历客户关联ID文件做匹配输出
{
    cust_id = $1
    # 遍历当前客户的所有关联ID
    for (i=2; i<=NF; i++) {
        rel_id = $i
        # 取关联ID最后四位,长度不足4位时直接取完整ID
        suffix = length(rel_id) >= 4 ? substr(rel_id, length(rel_id)-3) : rel_id
        # 匹配成功则输出结果
        if (match_map[cust_id][suffix] == 1) {
            print cust_id, rel_id
        }
    }
}
' match_list.txt customer_rel_ids.txt

示例验证

假设match_list.txt内容:

1001 5678
1002 9012

假设customer_rel_ids.txt内容:

1001 abc1234 def5678 ghi9012
1002 xyz3456 uvw9012

运行命令后输出结果:

1001 def5678
1002 uvw9012

方案2:直接从原始JSON流式处理(jq+awk组合)

不需要生成中间的关联ID文本文件,直接把API请求的结果通过管道处理:

# 替换为你实际调用API的命令(比如curl地址、认证参数等)
curl <你的API请求地址> | \
# 替换为你实际的jq提取逻辑,输出格式为 客户ID+空格分隔的所有关联ID
jq -r '.[] | "\(.customer_id) \(.related_ids | join(" "))"' | \
# awk从标准输入读取jq输出做匹配
awk '
NR == FNR { match_map[$1][$2] = 1; next }
{
    cust_id = $1
    for (i=2; i<=NF; i++) {
        suffix = length($i) >=4 ? substr($i, length($i)-3) : $i
        if (match_map[cust_id][suffix]) print cust_id, $i
    }
}
' match_list.txt -
  • 若字段分隔符为制表符,给awk加上-F'\t'参数即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:18:01