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

如何对第二列含2个及以上匹配字符串的行分组并分配新组号

解决方案

你可以用下面的awk脚本直接完成需求,不需要额外依赖:

BEGIN {
    FS = ", "
    group_id = 0
}

# 第一步:预读取所有行,保存原始内容和对应条目集合
{
    raw[NR] = $0
    n = split($2, arr, " ")
    for (i=1; i<=n; i++) {
        item_set[NR][arr[i]] = 1
    }
    group[NR] = 0
}

# 第二步:遍历匹配分组
END {
    for (i=1; i<=NR; i++) {
        # 已分过组的直接跳过
        if (group[i] != 0) continue
        current_group = 0
        # 匹配所有和当前行交集>=2的行
        for (j=1; j<=NR; j++) {
            if (i == j) continue
            # 计算两行条目的交集大小
            intersect = 0
            for (k in item_set[i]) {
                if (item_set[j][k]) intersect++
            }
            if (intersect >= 2) {
                if (current_group == 0) {
                    group_id++
                    current_group = group_id
                    group[i] = current_group
                }
                if (group[j] == 0) group[j] = current_group
            }
        }
    }
    # 输出最终结果
    for (i=1; i<=NR; i++) {
        print raw[i] (group[i] ? ", " group[i] : "")
    }
}

使用方法

将上述代码保存为group.awk,在终端执行以下命令即可:

awk -f group.awk 你的输入文件路径

运行效果

针对你给出的示例输入,运行后输出结果如下:

1, C10 C11 N3 O1, 1
2, C19 C23 O2, 2
3, C19 N2 O2, 2
4, C10 C11 O1, 1
5, C11 N3 O1, 1
6, C13 C8 O3, 3
7, C8 N5 O3, 3

符合要求:交集条目数≥2的行会被分到同一组,且行优先归入第一个匹配到的分组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:24:04