1.预备知识

comm命令可用于比较两个已排序的文件。它可以显示出第一个文件和第二个文件所独有的行以及这两个文件所共有的行。该命令有一些选项可以禁止显示指定的列,以便于执行交集和求差操作。

  • 交集(intersection):打印出两个文件所共有的行。
  • 求差(difference):打印出指定文件中所包含的互不相同的那些行。
  • 差集(set difference)①:打印出包含在文件A中,但不包含在其他指定文件(例如B和C)中的那些行。

2. 实战演练

需要注意的是comm必须使用两个排过序的文件作为输入。下面是我们用到的输入文件:

$ cat A.txt
apple
orange
gold
silver
steel
iron $ cat B.txt
orange
gold
cookies
carrot

$ sort A.txt -o A.txt ; sort B.txt -o B.txt

(1) 首先执行不带任何选项的comm:

$ comm A.txt B.txt
apple
carrot
cookies
gold
iron
orange
silver
steel

输出的第一列包含只在A.txt中出现的行,第二列包含只在B.txt中出现的行,第三列包含A.txt和B.txt中共有的行。各列之间以制表符(\t)作为分隔符。

(2) 为了打印两个文件的交集,我们需要删除前两列,只打印出第三列。-1选项可以删除第一列,-2选项可以删除第二列,最后留下的就是第三列:

$ comm A.txt B.txt - -
gold
orange

(3) 删除第三列,就可以打印出两个文件中互不相同的那些行:

$ comm A.txt B.txt -
apple
carrot
cookies
iron
silver
steel

输出中包含着夹杂有空白的两列,显示了在file1和file2中存在的唯一的行。要想提高输出结果的可用性,可以将两列合并成一列,就像这样:

apple
carrot
cookies
iron
silver
steel

(4) 可以使用tr删除制表符来合并两列:

$ comm A.txt B.txt - | tr -d '\t'
apple
carrot
cookies
iron
silver
steel

(5) 通过删除不需要的列,我们就可以分别得到A.txt和B.txt的差集。

A.txt的差集

$ comm A.txt B.txt -2 -3
-2 -3 删除第二列和第三列。

B.txt的差集
$ comm A.txt B.txt -1 -3
-1 -3 删除第一列和第三列。

3. 工作原理

comm的命令行选项可以减少输出。

  • -1:删除第一列。
  • -2:删除第二列。
  • -3:删除第三列。

差集操作允许你比较两个文件,去掉两个文件中共有的行,打印出只在A.txt或B.txt中出现的那些行。当A.txt和B.txt作为comm命令的参数时,输出中的第一列是A.txt相对于B.txt的差集,第二列是B.txt相对于A.txt的差集。

comm命令还接受字符-作为命令行参数,借此实现从stdin中读取输入。这就提供了一种比较多个文件的方法。

假设我们有一个文件C.txt:
$> cat C.txt
pear
orange
silver
mithral
我们可以将文件B.txt和C.txt与A.txt相比较:

$> sort B.txt C.txt | comm - A.txt
apple
carrot
cookies
gold
iron
mithral
orange
pear
silver
steel

最新文章

  1. JavaScript与PHP中正则
  2. Day20160425
  3. css样式
  4. iOS小画板画线总结
  5. ARMLinux下Alignment trap的一些测试 【转自 李迟的专栏 CSDN http://blog.csdn.net/subfate/article/details/7847356
  6. C语言:通过指针对数组元素进行排序
  7. Java笔记-快速失败and安全失败
  8. cocos2dX 音乐和声音效果
  9. Hello 2018
  10. BZOJ 1937: [Shoi2004]Mst 最小生成树 [二分图最大权匹配]
  11. 百度echarts使用--y轴label数字太长难以全部显示
  12. Spark技术内幕:究竟什么是RDD
  13. iUAP云运维平台v3.0全面支持基于K8s的微服务架构
  14. 18.11 ROM、RAM、DRAM、SRAM和FLASH区别
  15. hdu 3065 AC自动机 标记数组不清零
  16. .net core 路由处理请求流程图
  17. C#将List<>转换为Json,将DataSet转成List<T>
  18. 集合框架-Set集合
  19. 看不懂深度Linux系统的文件管理器图标
  20. day 49 数据分析, 数据聚合 F 查询 Q 查询

热门文章

  1. 时间格式的时间 转json的时候变成正常的string时间20170519
  2. istio1.1(openshift) 流量路由
  3. ssh实现免密码登录和文件传输
  4. Dom直接选择器
  5. TZ_05_Spring_事物的xml开发和annotation开发
  6. 常用web字体的使用指南
  7. [转]json对象详解
  8. 玩转webpack之webpack的基本知识
  9. 零开始Android逆向教程(一)——初探Android逆向
  10. JS---案例:无刷新评论---属于创建对象的案例拿出来复习