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

如何在Linux Bash环境下合并两个表并仅保留两边匹配的值

两个文本表取共同匹配值的Bash实现方法

假设两张表分别存储为table1.txt和table2.txt,每行仅存一个字符串,可通过以下几种常用方案实现需求:


方案1:使用comm命令(性能最优,适合大文件)

comm是Linux专门用于对比两个有序文件内容的工具,默认输出三列内容:仅第一个文件存在的行、仅第二个文件存在的行、两个文件共有的行,通过参数过滤可直接提取交集:

comm -12 <(sort table1.txt) <(sort table2.txt)

参数说明:

  • -1:隐藏仅在第一个文件中存在的内容
  • -2:隐藏仅在第二个文件中存在的内容
  • <(sort 文件名)为进程替换语法,用于对未排序的输入文件先做排序,满足comm要求输入为有序内容的规则

方案2:使用awk命令(无需提前排序,灵活度高)

如果不想修改原文件排序,可通过awk遍历两个文件完成匹配:

awk 'NR == FNR { record[$0] = 1; next } record[$0] == 1' table1.txt table2.txt

逻辑说明:

  • 先读取第一个文件table1.txt,把每一行内容作为数组record的键,值设为1做标记
  • 再读取第二个文件table2.txt,如果当前行在record数组中有对应标记,就输出该行

方案3:使用grep命令(写法最简单,适合小文件)

grep -xFf table1.txt table2.txt

参数说明:

  • -x:要求整行完全匹配,避免部分字符串匹配导致的误判
  • -F:把匹配模式当作普通固定字符串处理,不解析正则符号
  • -f table1.txt:从table1.txt中读取所有需要匹配的模式

示例结果说明

你给出的预期输出中包含的AX-18001189仅在TABLE1中出现,未在TABLE2中匹配到,实际执行上述命令得到的正确交集结果为:

AX-18000257
AX-18000816
AX-18001524

如果确实需要输出该值,可根据业务需求自行调整匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:04