From 6a54c2748a51b032fd56b1ee16c189698761934c Mon Sep 17 00:00:00 2001 From: ZhuangZhu-74 <49544524+ZhuangZhu-74@users.noreply.github.com> Date: Mon, 16 Mar 2020 17:13:47 +0800 Subject: [PATCH] Update comm.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新文档内容 --- command/comm.md | 93 ++++++++++++++++++------------------------------- 1 file changed, 34 insertions(+), 59 deletions(-) diff --git a/command/comm.md b/command/comm.md index 40ed63f348..d93d0d79ea 100644 --- a/command/comm.md +++ b/command/comm.md @@ -1,45 +1,42 @@ comm === -两个文件之间的比较 +按行比较两个已排序的文件。 -## 补充说明 - -**comm命令** 可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。 - -* 交集:打印出两个文件所共有的行。 -* 求差:打印出指定文件所包含的且不相同的行。 -* 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。 - -### 语法 +## 概要 ```shell -comm [选项]... 文件1 文件2 +comm [OPTION]... FILE1 FILE2 ``` -### 选项 +## 主要用途 + +- 按行比较两个已排序的文件。 +- 当`FILE1`或`FILE2`为`-`时,读取标准输入。 +- 无选项时输出三列,第一列为`FILE1`独有的行,第二列为`FILE2`独有的行,第三列为`FILE1`,`FILE2`共有的行。 + + +## 选项 ```shell -如果不附带选项,程序会生成三列输出。 -第一列包含文件1 特有的行, -第二列包含文件2 特有的行, -而第三列包含两个文件共有的行。 - - -1 不输出文件1 特有的行 - -2 不输出文件2 特有的行 - -3 不输出两个文件共有的行 - ---check-order 检查输入是否被正确排序,即使所有输入行均成对 ---nocheck-order 不检查输入是否被正确排序 ---output-delimiter=STR 依照STR 分列 +-1 不输出第一列。 +-2 不输出第二列。 +-3 不输出第三列。 +--check-order 检查输入行是否正确的排序,即使它们确实是已排序过的。 +--nocheck-order 不检查输入行是否正确的排序。 +--output-delimiter=STR 使用STR作为输出列之间的分隔符而不是默认的TAB。 +--total 额外地增加第四列输出概要。 +-z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 参数 -* 文件1:指定要比较的第一个**有序**文件; -* 文件2:指定要比较的第二个**有序**文件。 +## 返回值 -### 实例 +返回0表示成功,返回非0值表示失败。 + +## 例子 文本 `aaa.txt` 内容 @@ -66,12 +63,6 @@ ttt jjj ``` -两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数, 没有带上参数将会收到提示,此命令重要之功能在于比较。 - -```shell -comm: 文件2 没有被正确排序 -comm: 文件1 没有被正确排序 -``` 比较结果 @@ -88,21 +79,20 @@ eee hhh ttt jjj -第一列 第二列 第三列 ``` -输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。 +输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列之间以制表符(\t)作为分隔符。 -### 有序比较 +### 比较排序过的文档 -有序比较,先通过 sort 将文件内容排序 +先通过 sort 将文件内容排序: ```shell [root@localhost ~]# sort aaa.txt > aaa1.txt [root@localhost ~]# sort bbb.txt > bbb1.txt ``` -有序比较结果: +比较结果: ```shell [root@localhost ~]# comm aaa1.txt bbb1.txt @@ -128,25 +118,6 @@ bbb ccc ``` -**求差** - -打印出两个文件中不相同的行,需要删除第三列: - -```shell -[root@localhost text]# comm aaa.txt bbb.txt -3 | sed 's/^\t//' -aaa -aaa -ddd -eee -111 -222 -hhh -ttt -jjj -``` - -`sed 's/^\t//'` 是将制表符`\t`删除,以便把两列合并成一列。 - ### 差集 通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集: @@ -173,4 +144,8 @@ jjj ``` - \ No newline at end of file +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 comm`,`info coreutils 'comm invocation'`。 + +