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

如何使用awk命令按首列匹配合并两个文件生成指定格式输出

awk实现两个文本文件按ID合并方案

你可以直接使用以下awk命令完成需求,生成的输出文件和你给出的示例格式完全一致:

awk '{
    record[$1] = record[$1] " " $2
}
END {
    n = asorti(record, sorted_ids, "@ind_num_asc")
    for(i=1; i<=n; i++) {
        curr_id = sorted_ids[i]
        print curr_id substr(record[curr_id], 2)
    }
}' input1.txt input2.txt > output.txt

命令逻辑说明

  • 命令会按传入顺序依次读取input1.txt、input2.txt的每一行内容
  • 以每行第一列的数字ID作为关联键,将每行第二列的邮箱地址追加到对应ID的聚合内容后,自动完成同ID条目的归并
  • 所有文件读取完成后,将所有ID按数值升序排序,保证输出顺序和示例匹配
  • 输出时去掉拼接过程中产生的开头冗余空格,最终结果写入output.txt

兼容写法(适配无asorti函数的awk环境)

如果你的运行环境是mawk等不自带asorti排序函数的awk版本,可以用以下兼容命令实现相同效果:

awk '{
    record[$1] = record[$1] " " $2
}
END {
    for(id in record) print id
}' input1.txt input2.txt | sort -n | while read -r curr_id; do
    echo "$curr_id$(awk -v tid="$curr_id" '$1==tid{printf " "$2}' input1.txt input2.txt)"
done > output.txt

运行后生成的output.txt内容和预期完全一致:

113812627 <prepaid@xxx.com> <user1@xxx.com> <user2@xxx.com>
113812628 <user@yyy.com> <user1@yyy.com> <user2@yyy.com>
113812629 <hello@zzz.com> <user1@zzz.com> <user2@zzz.com>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:03:32