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

AWK实现匹配Field1并拼接所有匹配行Field4的技术求助

当然可以帮你搞定这个需求!用AWK处理这种按字段分组提取的任务,可比Excel高效太多了——尤其是面对大文件的时候,完全不用卡半天。

需求拆解

我们要实现的逻辑是:按第一列(Field1)分组,输出每个分组的Field1值,以及该分组下所有行的第四列(Field4)值。

AWK脚本实现

这里给你两种常用的实现方式,你可以根据自己的需求选择:

方式1:先收集所有数据再统一输出(推荐,不管输入是否排序都能正确分组)

# 遍历每一行,把同一Field1的Field4收集到数组里
{
    # 用Field1作为数组键,Field4追加到对应值后,用空格分隔
    groups[$1] = groups[$1] " " $4
}

# 所有行处理完后,输出每个分组的结果
END {
    for (key in groups) {
        # 去掉开头多余的空格,然后输出Field1 + 所有Field4
        print key substr(groups[key], 2)
    }
}

方式2:实时输出(适合输入已经按Field1排序的情况)

如果你的输入文件已经是按Field1排序好的,也可以用这种边读边输出的方式,节省内存:

# 记录当前正在处理的Field1
prev_key = ""

{
    # 如果当前行的Field1和上一行不同,先换行(第一行除外)
    if ($1 != prev_key && prev_key != "") {
        print ""
    }
    # 如果是第一次遇到这个Field1,先输出Field1值
    if ($1 != prev_key) {
        printf "%s", $1
        prev_key = $1
    }
    # 追加输出当前行的Field4
    printf " %s", $4
}

# 最后补一个换行,确保格式完整
END {
    print ""
}

效果演示

拿你给出的输入片段举例:

ASHBBPRJ01-ASHBBPRJ02-BE ASHBBPRJ01.RD.AS 1 ASHBBBRJ01.RD.AS ae1.0 strict
ASHBBPRJ01-ASHBBPRJ02-BE ASHBBPRJ01.RD.AS 2 ASHBBPRJ02.RD.AS ae1.0 strict

用方式1处理后,输出结果是:
ASHBBPRJ01-ASHBBPRJ02-BE ASHBBBRJ01.RD.AS ASHBBPRJ02.RD.AS

自定义调整

如果想要用其他分隔符(比如换行、逗号)来分隔Field4,只需要修改脚本里的分隔符即可。比如要让每个Field4单独换行:
把groups[$1] = groups[$1] " " $4改成groups[$1] = groups[$1] "\n" $4,输出时的格式也会对应变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:21:03