comm 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于文本处理命令族(见文本处理命令族)。快速求两个文件行的"交集/差集",它比 diff 更直接。
comm 比较两个已排序的文件,输出三列:只在 A 的行、只在 B 的行、两者共有的行。做集合运算特别顺手。
一、基本用法
bash
comm a.txt b.txt
# 第1列:仅 a.txt 有
# 第2列:仅 b.txt 有
# 第3列:两者共有前提:两个文件都必须先 sort(comm 是逐行归并比较,乱序会错)。输出用制表符分三列。
二、取交集 / 差集(去掉列)
bash
comm -12 a.txt b.txt # 去掉第1、2列 → 只留第3列 = 交集
comm -3 a.txt b.txt # 去掉第3列 → 只留1、2列 = 差集(A有+B有)
comm -23 a.txt b.txt # 去2、3列 → 仅 A 独有
-1/-2/-3是"抑制"对应列。求交集用comm -12(最常见),求"你有什么我没有"用comm -23。比用grep -v拼凑干净得多。
三、实战:找新增/缺失
bash
sort today.txt > t.sorted; sort yesterday.txt > y.sorted
comm -13 y.sorted t.sorted # 今天新增的行(在today不在yesterday)
comm -23 y.sorted t.sorted # 今天消失的行日志/清单对比常用:排序后 comm 一眼分出新增和消失项。注意先 sort 再 comm,顺序不能省。
四、与 diff / join 的区别
bash
diff a b # 看"改了什么行"(行级差异,见 [diff](/linux/cmd/diff.md))
join a b # 按 key 关联两文件(见 [join](/linux/cmd/join.md))
comm a b # 集合运算:交集/差集(需先排序)一句话总结
comm = 已排序文件的集合比较(输出三列:仅A/仅B/共有):必须先 sort;comm -12 取交集、comm -23 取仅A、comm -3 取差集;适合找新增/消失行。与 diff(找改动)、join(按key关联)分工不同。