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命令进行更复杂的比较
相关推荐
星轨初途2 分钟前
LeetCode 热题 100——day10 和为 K 的子数组
开发语言·c++·算法·leetcode
数模竞赛Paid answer4 分钟前
2021年深圳杯数学建模C题配电网可靠性和故障软自愈研究解题全过程论文及程序
算法·数学建模·数据分析·深圳杯
有点。9 分钟前
C++广度优先搜索(二)-练习题
c++·算法·宽度优先
骇客野人10 分钟前
阿里云运维手册(通用生产版|云上运维标准化文档)
运维·阿里云·云计算
疯狂打码的少年22 分钟前
【数据结构】队列的应用:循环队列
数据结构·笔记·算法
雾时之林30 分钟前
Linux---计算机网络常见面试题
linux·运维·计算机网络
Winner_hwx36 分钟前
python拓展
算法
TAN-90°-1 小时前
Deep Learning for Computer Vision——Image Classification with Linear Classifiers
python·深度学习·算法·计算机视觉·线性回归
维核科技1 小时前
多卡集群频繁裂卡、通信报错?NVLink故障排查与运维优化方案
运维·服务器维修·gpu维修·算力卡维修·gpu故障·算力卡故障·服务器故障
10mAh1 小时前
【Linux】error while loading shared libraries 怎么解决?——ldd、RPATH 与动态链接排错
java·linux·前端