首页>教程>Linux 命令手册> 文件内容查看与处理 >Linux comm 命令 - 逐行对比两个已排序文件

Linux comm 命令 - 逐行对比两个已排序文件

comm 命令(英文全称为 common)是 Linux / Unix 系统中用于逐行对比两个已排序的文本文件的命令,默认会输出三列结果,清晰的区分出「第一个文件独有的行」、「第二个文件独有的行」和「两个文件共有的行」,同时还支持隐藏指定的列、自定义分隔符等功能,是对比文本的一款非常好用的工具。

[!NOTE]

comm 命令默认会对文件进行排序校验,同时对的比规则受系统 LC_COLLATE 环境变量控制。

相似功能命令对比

  • comm:只支持对比已排序的文件,输出三列结果,结果简单明了
  • diff:支持未排序文件对比,会输出专门的差异文件

comm 命令语法结构

comm 命令的语法结构简单明了,其具体的语法形式为:

comm [选项] 文件1 文件2

语法中各部分的解释说明:

  • [选项]:可选的内容,用于控制输出格式、校验规则、分隔符等内容
  • 文件1 / 文件2:需要对比的两个文本文件;可以把其中一个指定为 -,表示从标准输入读取内容

comm 命令示例

comm 命令使用的文件必须是排序后的文件,可以使用 sort file1 -o file2 对文件进行排序。

默认无选项对比

不使用任何选项,默认会输出三列的数据:

comm file1.txt file2.txt

输出的三列数据的解释说明:

  • 第一列:只在 file1.txt 中存在的行;
  • 第二列:只在 file2.txt 中存在的行;
  • 第三列:两个文件都存在的共有行。

提取两个文件的共有行

使用 -1 选项隐藏第一列和 -2 选项隐藏第二列,只输出第三列的共有行:

comm -12 file1.txt file2.txt

只输出两个文件的独有行

使用 -3 选项隐藏第三列,保留两个文件的独有行:

comm -3 file1.txt file2.txt

自定义列分隔符

使用 --output-delimiter 选项赋值特定的值,自定义列使用的分隔符:

comm --output-delimiter=, file1.txt file2.txt

[!NOTE]

--output-delimiter= 的只可以使用引号,也可以不适用引号

关闭文件排序校验

使用 --nocheck-order 选项禁用命令的自动排序校验功能:

comm --nocheck-order file1.txt file2.txt

显示对比统计摘要信息

使用 --total 选项在输出内容的最后显示统计摘要信息:

comm --total file1.txt file2.txt

comm 命令选项详解

如下给出 comm 命令的所有的选项的解释说明:

选项格式选项说明
-1隐藏第一列,即:不输出 文件1 的独有行
-2隐藏第二列,即:不输出 文件2 的独有行)
-3隐藏第三列,即:不输出「两个文件的共有行」
--check-order强制校验输入文件是否已正确排序
--nocheck-order不对输入文件进行排序校验,当确定文件已排序时使用
--output-delimiter=STR使用字符串 STR 作为列分隔符,默认的分隔符为制表符
--total输出对比结果的统计摘要信息
-z, --zero-terminated指定行分隔符为 NUL 空字符,默认的行分隔符为换行符
--help显示命令的帮助信息并退出
--version显示命令的版本信息并退出

结语

comm 命令是 Linux / Unix 系统中轻量且高效的对已排序文件进行对比的工具,能够非常简明的输出对比信息,同时还能提取不同行的信息和共同行的信息,使用 comm 命令对比文件非常的简单。