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命令进行更复杂的比较
相关推荐
做怪小疯子1 小时前
Leetcode刷题——深度优先搜索(DFS)
算法·leetcode·深度优先
大数据AI人工智能培训专家培训讲师叶梓1 小时前
120B 数学语料 + GRPO 算法,DeepSeekMath 刷新开源大模型推理天花板
人工智能·算法·大模型·推理·deepseek·openclaw·openclaw 讲师
淡泊if1 小时前
1.2GB → 98MB,我的 Docker 镜像瘦身实战记录
运维·docker·容器
Sst的头号粉丝1 小时前
Docker——cgroups
运维·docker·容器
薛定谔的悦1 小时前
嵌入式设备OTA升级实战:从MQTT命令到自动重启的全流程解析
linux·算法·ota·ems
杰克尼2 小时前
知识点总结--01
数据结构·算法
cici158742 小时前
图像匹配算法:灰度相关法、相位相关法与金字塔+相位相关法
算法
佚名ano2 小时前
支持向量机SVM的简单推导过程
算法·机器学习·支持向量机
云泽8082 小时前
蓝桥杯算法精讲:倍增思想与离散化深度剖析
算法·职场和发展·蓝桥杯