news 2026/6/10 12:32:33

Linux 命令:comm

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 命令:comm

概述

comm命令,这个命令的核心作用是逐行对比两个已排序文件的内容,并按“仅文件1独有、仅文件2独有、两个文件共有”三列输出结果,是专门用于文本差异对比的轻量工具。

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

一、核心前提(必看)

使用comm硬性要求

  1. 待对比的两个文件必须按行排序(否则输出结果无意义);
  2. 默认按整行内容对比,不支持按列/关键字对比(需先预处理);
  3. 仅支持两个文件的对比(多文件需两两对比)。

二、基本语法

comm[选项]文件1 文件2
  • 无选项时,默认输出三列结果
    • 第1列:仅文件1含有的行;
    • 第2列:仅文件2含有的行;
    • 第3列:两个文件共有的行;
  • 列之间用制表符(\t)分隔;
  • 支持-作为文件参数,代表读取标准输入(如comm - file1 -对比标准输入和file1)。

三、常用选项(极简,仅控制列显示)

comm的选项核心是“隐藏指定列”,无冗余功能,所有选项均为单字符,易记易用:

选项作用实用场景
-1隐藏第1列(仅文件1独有的行)只看“仅文件2独有 + 共有行”
-2隐藏第2列(仅文件2独有的行)只看“仅文件1独有 + 共有行”
-3隐藏第3列(两个文件共有的行)只看“仅文件1独有 + 仅文件2独有”(即两个文件的差异行)
-12同时隐藏第1、2列只看两个文件的共有行(交集)
-13同时隐藏第1、3列只看仅文件2独有的行(差集)
-23同时隐藏第2、3列只看仅文件1独有的行(差集)
-i忽略大小写(部分系统支持,如GNU comm)对比时不区分字母大小写
-d允许输入文件未排序(仅GNU comm支持,不推荐)临时应急,结果可能不准确

四、基础示例(快速理解三列输出)

先准备两个已排序的测试文件:

# file1.txt apple banana cherry date grape # file2.txt banana date fig grape orange
场景1:默认输出(三列)
commfile1.txt file2.txt

输出结果(列间用\t分隔,可视化如下):

apple # 第1列(仅file1) banana # 第3列(共有) cherry # 第1列(仅file1) date # 第3列(共有) fig # 第2列(仅file2) grape # 第3列(共有) orange # 第2列(仅file2)

(注:实际输出中,第1列无前置\t,第2列1个\t,第3列2个\t,上述为便于理解的可视化)

场景2:只看共有行(-12)
comm-12 file1.txt file2.txt

输出(仅交集):

banana date grape
场景3:只看差异行(-3)
comm-3 file1.txt file2.txt

输出(仅独有的行,分两列):

apple cherry fig orange
场景4:只看file1独有的行(-23)
comm-23 file1.txt file2.txt

输出(file1的差集):

apple cherry
场景5:只看file2独有的行(-13)
comm-13 file1.txt file2.txt

输出(file2的差集):

fig orange

五、进阶实操(处理非纯文本/结构化文件)

场景1:对比未排序文件(先排序再对比)

若文件未排序,需先通过管道排序后对比(用-读取标准输入):

# 对比两个未排序文件的交集comm-12<(sortunsorted1.txt)<(sortunsorted2.txt)
  • <(命令)是进程替换,将命令输出作为临时文件传递给comm。
场景2:对比结构化文件(按指定列对比)

comm仅对比整行,若需按列对比(如CSV的某一列),需先提取目标列并排序:

# user1.csv(ID,姓名) 1,张三 2,李四 3,王五 # user2.csv(ID,姓名) 2,李四 3,王五 4,赵六

提取ID列并对比交集:

# 提取ID列 → 排序 → 对比交集comm-12<(cut-d","-f1 user1.csv|sort)<(cut-d","-f1 user2.csv|sort)

输出(共有的ID):

2 3
场景3:配合其他命令处理对比结果

将对比结果去重、格式化(如把差异行合并为单行):

# 提取file1和file2的差异行,并用逗号分隔输出comm-3 file1.txt file2.txt|tr-d'\t'|paste-s -d","-

输出:

apple,cherry,fig,orange

六、与diff/join的核心区别(必分清)

commdiffjoin均为文本对比/合并工具,但定位完全不同:

命令核心逻辑输入要求核心用途
comm按整行对比两个文件,输出“独有/共有”三列需排序快速找两个文件的交集、差集
diff逐行分析内容差异(增/删/改),输出详细差异描述无需排序查看文件内容的具体修改(如代码对比)
join按关键字段列合并,实现数据库JOIN效果需按关键字排序关联结构化数据(按列匹配)

示例对比

  • 想知道“两个文件哪些行一样、哪些不一样” → 用comm
  • 想知道“文件A的某行在文件B中被修改成了什么” → 用diff
  • 想知道“文件A的ID列和文件B的ID列匹配的行,合并显示” → 用join

七、关键注意事项

  1. 排序一致性:两个文件的排序规则必须一致(如都按ASCII升序、都忽略大小写),否则对比结果错误;
  2. 空行处理:空行视为普通行,会参与对比(连续空行需先sort | uniq去重);
  3. 空格/制表符:行首/行尾的空格会影响对比(如appleapple视为不同行),需先用sed 's/^ *//;s/ *$//'去除首尾空格;
  4. 编码兼容:确保两个文件编码一致(如均为UTF-8),避免因编码差异导致对比异常;
  5. 超大文件comm逐行处理,内存占用低,可直接对比GB级排序后的文本文件。

八、高频组合用法(实战直接复用)

1. 快速找两个文件的交集(共有行)
comm-12<(sortfile1.txt)<(sortfile2.txt)
2. 快速找两个文件的差异行(所有独有行)
comm-3<(sortfile1.txt)<(sortfile2.txt)|tr-d'\t'# 去除列分隔符,合并为单列
3. 对比两个日志文件的唯一IP(按IP去重后对比)
# 提取IP并去重排序,再对比交集comm-12\<(grep-o"\b[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\b"log1.log|sort-u)\<(grep-o"\b[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\b"log2.log|sort-u)
4. 对比两个目录下的文件列表(找新增/删除的文件)
# 生成两个目录的文件列表,排序后对比comm-3\<(ls-1 dir1|sort)\<(ls-1 dir2|sort)

总结

comm轻量的行级对比工具,核心价值是快速找出两个排序文件的交集、差集,日常使用的核心要点:

  1. 核心用法:通过-1/-2/-3组合隐藏列,精准获取“交集/差集”;
  2. 输入要求:必须先排序(未排序文件用<(sort 文件)进程替换);
  3. 场景适配:仅需行级归属关系用comm,需详细内容差异用diff,需按列匹配用join
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 6:55:48

大数据领域存算分离:优化数据查询性能

大数据领域存算分离&#xff1a;优化数据查询性能 关键词&#xff1a;存算分离、大数据架构、查询性能优化、存储计算解耦、云原生数据架构 摘要&#xff1a;在大数据时代&#xff0c;数据量呈指数级增长&#xff0c;传统“存算一体”架构因存储与计算资源绑定&#xff0c;常面…

作者头像 李华
网站建设 2026/6/5 22:59:24

SSM毕设项目:基于ssm的智能密室逃脱信息管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/29 0:38:35

分布式系统容错设计

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value)&#xff1a;查找第一个等于 value 的元素&#xff0c;返回迭代器&#xff08;未找到返回 end&#xff09;。find_if(begin, end, predicate)&#xff1a;查找第…

作者头像 李华
网站建设 2026/6/8 13:03:56

我的免费低代码选型笔记!五位搭档让我效率起飞

在推动公司数字化的这几年&#xff0c;我就像一个在工具海洋里寻宝的人。面对五花八门的低代码平台&#xff0c;我最深的体会是&#xff1a;没有最好的&#xff0c;只有最合适的。今天&#xff0c;我想和你分享五位让我印象深刻的“国产搭档”——轻骑兵低代码、JVS低代码、炎黄…

作者头像 李华
网站建设 2026/5/29 10:00:26

2025年SEVC SCI2区,强化灰狼优化算法SGWO+数值优化任务与自动机器学习

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

作者头像 李华
网站建设 2026/5/30 18:29:08

这两天是真忙。一边发春节放假通知,一边发奖金

这两天是真忙。 一边发春节放假通知&#xff0c;一边发奖金。说句实话&#xff0c;对小创业者来说&#xff0c;每年春节发奖金&#xff0c;都是一件“心疼但必须干”的事。 但该给的&#xff0c;不能省。最近还在琢磨【公司实缴】的事。 一口气全实缴&#xff0c;压力太大了&am…

作者头像 李华