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 命令对比文件非常的简单。