Linux comm命令介绍
comm命令是compare two sorted files的缩写,它可以一行行地比较两个已排序的文件,并将结果分成三列显示。第一列是只在第一个文件中出现的行,第二列是只在第二个文件中出现的行,第三列是在两个文件中都出现的行。comm命令可以用于查找文件之间的差异和相同之处,也可以用于过滤或合并文件内容。
适用的Linux版本
comm命令是一个标准的Linux工具,它适用于大多数的Linux发行版,如Ubuntu, Debian, CentOS, Fedora等。如果你的系统没有安装comm命令,你可以使用以下命令来安装它:
- 对于基于Debian的系统,如Ubuntu,你可以使用apt-get命令来安装:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install coreutils
- 对于基于Red Hat的系统,如CentOS,你可以使用yum或dnf命令来安装:
[linux@bashcommandnotfound.cn ~]$ sudo yum install coreutils
或者
[linux@bashcommandnotfound.cn ~]$ sudo dnf install coreutils
Linux comm命令的基本语法
comm命令的基本语法如下:
comm [选项] 文件1 文件2
其中,文件1和文件2是要比较的两个已排序文件的名称。如果文件名为-,则表示从标准输入读取数据。选项可以用来控制输出的格式和内容。
Linux comm命令的常用选项说明
comm命令有以下几个常用的选项:
选项 | 说明 |
---|---|
-1 | 不显示只在文件1中出现的行 |
-2 | 不显示只在文件2中出现的行 |
-3 | 不显示在两个文件中都出现的行 |
--check-order | 检查文件是否已排序,如果没有,则报错 |
--nocheck-order | 不检查文件是否已排序 |
--output-delimiter=字符 | 用指定的字符代替默认的空格作为输出列之间的分隔符 |
--total | 显示每一列中行数的总和 |
-z | 用空字符而不是换行符作为输出行的结束符 |
Linux comm命令的实例
以下是一些使用comm命令的实例:
比较两个文件并显示三列输出
假设有两个文件file1.txt和file2.txt,它们的内容如下:
file1.txt:
apple
banana
cherry
date
grape
file2.txt:
banana
cherry
date
kiwi
orange
我们可以使用comm命令来比较这两个文件,并显示三列输出:
[linux@bashcommandnotfound.cn ~]$ comm file1.txt file2.txt
apple
banana
cherry
date
grape
kiwi
orange
输出中,第一列是只在file1.txt中出现的行(apple和grape),第二列是只在file2.txt中出现的行(kiwi和orange),第三列是在两个文件中都出现的行(banana, cherry和date)。
比较两个文件并只显示相同的行
如果我们只想看两个文件中相同的行,我们可以使用-12选项来隐藏前两列:
[linux@bashcommandnotfound.cn ~]$ comm -12 file1.txt file2.txt
banana
cherry
date
输出中,只有一列,即在两个文件中都出现的行。
比较两个文件并只显示不同的行
如果我们只想看两个文件中不同的行,我们可以使用-3选项来隐藏第三列:
[linux@bashcommandnotfound.cn ~]$ comm -3 file1.txt file2.txt
apple
grape
kiwi
orange
输出中,有两列,第一列是只在file1.txt中出现的行,第二列是只在file2.txt中出现的行。
比较两个文件并使用制表符作为分隔符
如果我们想用制表符而不是空格来分隔输出的列,我们可以使用--output-delimiter选项,并指定分隔符为\t:
[linux@bashcommandnotfound.cn ~]$ comm --output-delimiter='\t' file1.txt file2.txt
apple banana banana
cherry cherry
date date
grape kiwi
orange
输出中,每一列之间用一个制表符分隔。
比较两个文件并显示每一列的总行数
如果我们想看每一列中有多少行,我们可以使用--total选项来显示总和:
[linux@bashcommandnotfound.cn ~]$ comm --total file1.txt file2.txt
apple
banana
cherry
date
grape
kiwi
orange
2 2 3
输出中,最后一行显示了每一列的总行数。第一列有2行,第二列有2行,第三列有3行。
Linux comm命令的注意事项
- comm命令要求输入的文件必须已经按照字典顺序排序。如果文件没有排序,comm命令可能会产生错误或不完整的结果。如果你不确定文件是否已排序,你可以使用--check-order选项来检查。如果文件没有排序,comm命令会报错并退出。
- 如果你想比较两个未排序的文件,你可以使用sort命令来对文件进行排序,并将结果传递给comm命令。例如:
[linux@bashcommandnotfound.cn ~]$ comm <(sort file1.txt) <(sort file2.txt)
这个命令使用了进程替换的语法,它会将sort命令的输出作为临时文件传递给comm命令。
- comm命令默认会忽略大小写的差异。如果你想区分大小写,你可以使用sort命令的-f选项来忽略大小写,并将结果传递给comm命令。例如:
[linux@bashcommandnotfound.cn ~]$ comm <(sort -f file1.txt) <(sort -f file2.txt)
这个命令会将file1.txt和file2.txt中的大写字母转换为小写字母,并按照字典顺序排序,然后传递给comm命令。
评论区