Linux 的 comm 命令

Linux 的 comm 命令是一个用于逐行比较两个已排序文件的强大文本处理工具。它能够精确识别文件间的差异和共同点,特别适合系统管理员和开发人员进行文本分析。

基本语法:

复制代码
comm [选项] 文件1 文件2

功能详解:

  1. 第一列输出:仅在文件1中出现的行(使用示例:找出file1特有的配置项)
  2. 第二列输出:仅在文件2中出现的行(使用示例:发现file2新增的日志条目)
  3. 第三列输出:两个文件共有的行(使用示例:确认两个版本共用的函数定义)

常用选项详解:

  • -1:隐藏第一列输出,例如comm -1 a.txt b.txt只显示b特有和共有的行
  • -2:隐藏第二列输出,适合快速找出a文件特有内容
  • -3:隐藏第三列输出,用于只查看差异部分
  • --check-order:严格检查输入文件是否已排序,发现未排序会报错
  • --nocheck-order:跳过排序检查(默认),但可能导致错误结果

使用前提注意事项:

典型应用场景扩展:

  1. 配置文件差异分析:

    先备份并排序配置文件

    cp httpd.conf httpd.conf.bak
    sort httpd.conf > httpd.sorted
    sort httpd.conf.bak > httpd.bak.sorted

    找出修改过的配置项

    comm -3 httpd.sorted httpd.bak.sorted

  2. 日志文件分析进阶:

    找出两个时间段都出现的错误(交集)

    comm -12 morning_errors.log.sorted evening_errors.log.sorted

    使用进程替换避免中间文件

    comm -12 <(sort log1.txt) <(sort log2.txt)

  3. 用户管理系统示例:

    找出新添加的用户

    comm -13 /etc/passwd.old.sorted /etc/passwd.new.sorted

    找出被删除的用户

    comm -23 /etc/passwd.old.sorted /etc/passwd.new.sorted

高级技巧:

  1. 结合grep过滤结果:comm file1 file2 | grep -v '^\t'
  2. 使用-i选项进行大小写不敏感比较(需要GNU comm)
  3. 处理制表符:comm --output-delimiter=',' 更改分隔符
  4. 性能优化:对大文件使用sort -u先去除重复行

注意事项补充:

  • 制表符(\t)用于分隔输出列,可能影响可视化
  • 空行会被视为有效内容参与比较
  • 在脚本中使用时建议总是显式指定--check-order
  • 可以搭配diff命令进行更复杂的比较
相关推荐
M78佐菲7 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
骇客野人7 小时前
Redis 完整安装部署方案(Linux,分【源码编译】+【Docker】两种,推荐生产用源码,测试快速用 Docker)
运维
益达丫9 小时前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
aramae9 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能10 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
蓝速科技11 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
chicheese11 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
Linux-lucky11 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
智能运维指南12 小时前
2026年ITSM系统怎么选?四款主流方案与五维评估模型
运维·itsm·嘉为蓝鲸
vortex512 小时前
常用终端模拟器全面对比:Kitty、WezTerm、Ghostty 与 Konsole
linux