news 2026/9/2 22:35:24

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/9/2 4:02:41

大数据深度学习|计算机毕设项目|计算机毕设答辩|基于知识图谱的《平凡的世界》知识问答系统设计与实现

一、项目介绍 随着信息技术的快速发展&#xff0c;特别是人工智能领域的不断进步&#xff0c;知识图谱作为一种高效的知识表示和推理工具&#xff0c;正逐渐在各个领域展现出其强大的应用价值。在文学领域&#xff0c;尤其是经典文学作品的研究与传播中&#xff0c;知识图谱技…

作者头像 李华
网站建设 2026/9/2 21:38:50

开题报告基于Java-web的博客网站

目录项目背景与意义技术选型核心功能模块创新点与难点预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作项目背景与意义 随着互联网的普及&#xff0c;个人博客成为信息分享、知识传播的重要平台。基…

作者头像 李华
网站建设 2026/9/2 21:38:41

《双模型零GC框架:业务逻辑层设计与实践手册》

零GC设计的本质,绝非简单粗暴地禁用垃圾回收机制,而是构建一种让内存流转节奏与业务逻辑执行轨迹深度耦合、同频共振的架构范式—这种范式需要突破面向对象模型的模块化封装与ECS模型的高性能调度之间的天然壁垒,实现数据生命周期与业务行为的精准对齐。传统框架中,面向对象…

作者头像 李华
网站建设 2026/9/2 22:29:44

Python函数定义与调用:编写可重用代码的基石

SQLAlchemy是Python中最流行的ORM&#xff08;对象关系映射&#xff09;框架之一&#xff0c;它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。目录安装SQLAlchemy核心概念连接数据库定义数据模型创建数据库表基本CRUD操作查询数据关系操…

作者头像 李华
网站建设 2026/9/2 22:27:51

Python类型提示(Type Hints)详解

SQLAlchemy是Python中最流行的ORM&#xff08;对象关系映射&#xff09;框架之一&#xff0c;它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。 目录 安装SQLAlchemy 核心概念 连接数据库 定义数据模型 创建数据库表 基本CRUD操作…

作者头像 李华