文档章节

比较两个排序好的文件的方法—— comm

l
 linux-tao
发布于 2017/06/27 22:53
字数 934
阅读 5
收藏 0

比较两个排序好的文件的方法—— comm比较两个排序好的文件的方法—— comm

如何使用 comm比较两个排序好的文件

要使用comm 命令比较两个排序好的文件,只需要把它们的名字作为comm 命令的参数。下面是通常的语法:

comm [name-of-first-file] [name-of-second-file]

比如,假设file1 和file2 是这种情况下的两个文件。前者包含下面几行内容:

001
056
127
258

而后者包含下面几行内容:

002
056
167
369

此时,comm命令的输出如下图所示:

comm file1 file2

比较两个排序好的文件的方法—— comm比较两个排序好的文件的方法—— comm

你可以看到,输出包含 3 列。第一列是仅包含在file1中的内容,第二列是仅包含在 file2 中的内容,最后,第三列是两个文件中均包含的内容。

如何不输出 comm 命令输出中的某些列

如果你想,你可以不输出 comm命令输出中的某些列。对于该特性,你有三个命令行选项可用:-1、-2 和-3 。正如你所猜想的,这些数字表示你不想输出的列。

比如,下面这个命令将会不输出上面例子中的第三列:

comm -3 file1 file2

比较两个排序好的文件的方法—— comm比较两个排序好的文件的方法—— comm

因此,你可以看到,第三列并没有输出。

注意,你可以通过一个单一命令同时不输出多列内容。比如:

comm -12 file1 file2

上面这个命令将会不输出第一、二列。

如何使用 comm 命令比较两个未排序好的文件

正如我们所知道的,comm 只可用于排序好的文件。如果发现其中一个文件未排序好,那么便会在输出中产生一条信息来告诉用户。比如,我们交换 file1 的第一行和第二行,然后与 file2 进行比较。下面是该命令的输出:

比较两个排序好的文件的方法—— comm比较两个排序好的文件的方法—— comm

你可以看到,这个命令产生一个输出告诉我们:file1 还没有排序好。此时,如果你不想让这个工具检查输入是否已经排序好,那么你可以使用 --nocheck-order 选项:

comm --nocheck-order file1 file2

比较两个排序好的文件的方法—— comm比较两个排序好的文件的方法—— comm

你可以看到,前面出现的提示信息已经消失了。

注意,如果你想明确告诉 comm 命令来检查输入文件是否排序好,那么你可以使用 --check-order选项。

如何用自定义字符串分隔comm 命令的输出列

默认情况下,comm 命令的输出列之间是以空格分隔的。然而,如何你想使用一个自定义字符串作为分隔符,那么你可以使用 --output-delimiter选项。使用该选项时需要指定你想用来作为分隔符的字符串。

comm --output-delimiter=+ file1 file2

比如,我们使用加号来作为分隔符:

比较两个排序好的文件的方法—— comm比较两个排序好的文件的方法—— comm

如何使 comm 的输出行以 NUL字符终止

默认情况下,comm 命令的输出行以新行终止。然而,如果你想,那么你可以改为以

NUL

字符终止,只需要使用-z 选项即可:

comm -z file1 file2

结论

comm 命令并没有特别多的特性性,我们在这儿已经讨论了它的绝大多数命令行选项。只需要理解和练习在这篇教程中讨论的内容,那么你便可以在日常工作中知道如何使用这个工具了。如果你有任何问题或者疑问,请前往该命令的man 手册,或者在下面评论。

via: https://www.howtoforge.com/linux-comm-command/

作者:Himanshu Arora 译者:ucasFL 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出

原文来自:https://linux.cn/article-8583-1.html

本文地址: http://www.linuxprobe.com/comm-sort.html

© 著作权归作者所有

l
粉丝 20
博文 1005
码字总数 1128332
作品 0
深圳
运维
私信 提问
[Linux command] comm

comm [- 123 ] file1 file2 说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现...

SibylY
2015/01/30
37
0
一道传说中是百度面试的shell试题

【问题】写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。 翻译成人话就是,假设有一个文件a是: a b c d 文件b是: 1 2 3 4 a b 现在...

zqx1787
2016/05/10
0
0
技巧:当不能抛出异常时

checked 异常的一个问题是,有时候不允许抛出这样的异常。特别是,如果要覆盖超类中声明的方法,或者实现接口中声明的方法,而那个方法没有声明任何 checked 异常,那么新的实现也不能声明 ...

红薯
2010/05/02
299
0
如何依据表中数据的一部分进行排序

表结构是这样的: 其中rwshuju内部的数据格式如下: 然后要求做一个排序,要求使用rwshuju内部的comm_req的jiaoyirq和user_id进行排序。 想过在代码中进行排序,但是数据量太大,这个就放弃了.想过...

skjanyou
2017/12/26
124
0
Shell脚本对比两个文本文件找出不同行的2个方法分享

这篇文章主要介绍了Shell脚本对比两个文本文件找出不同行的2个方法分享,本文分别使用comm命令法、grep命令法实现,需要的朋友可以参考下 亲自实验过的方法如下: 第一种:comm命令法 命令如下...

815632410
2015/05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

xiangyunyan
39分钟前
6
0
返回提示信息,如:xxx创建成功!

【服务端】在输出的方法块中,加入要输出的字段(qcm_batch_id) QCMUserType.cs: public struct QCM_Custom_Create_Batch_Out_Tag { public BASCoreType.Cmn_Out_T......

_Somuns
39分钟前
6
0
Aliyun Serverless VSCode Extension v1.12.0 发布

Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试...

阿里云官方博客
39分钟前
6
0
程序员如何培养解决复杂问题的能力?

今天在上网时候,突然看到了这篇文章,感觉非常的适合现在的自己去思考下,可能也适用在座的读者。程序员不仅仅是敲代码,更是一个复合能力的结合体,也不仅仅停留在技术和代码阶段。你想要成...

哥本哈根的小哥
43分钟前
8
0
市场变化驱动产品思维升级

宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式。 拓展阅读:回归架构本质,重新理解微服务 智慧金融时代,大数据和AI如何为业务赋能...

宜信技术学院
43分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部