小公举comm,快速比较两个排序文件

前言

我们经常会有需求比较一个文件里的内容是否在另一个文件存在。假如我有一份监控列表的IP写入在了file1,我所有的机器IP写入在了file2,我要找出还有哪些机器没有在监控列表。以前的做法是写个两层循环,或者用diff命令。打印出来也没那么直观,直到最近找打了comm,以前也知道这个小工具,可能是没有静心去看他之类的,总感觉搞不明白。最近几天类似的比较需求有点多,还是决定用它,也就有了自己的总结。
 

目录

1、comm的功能
2、用法
3、输出格式
4、参数
5、例子
6、写在最后
 

1、功能

用于比较两个已经排过序的文件。这里一定要注意是两个文件都要已经排序了,没有排序的话,打印出来的结果是不一样的。
 

2、用法

comm [-123] file1 file2

3、输出

用comm命令比较出来后,一共会有3列的显示,其中的代表的含义如下:
第一列:显示仅在第一个文件有的行。
第二列:显示仅在第二个文件有的行。
第三列:显示在文件1和文件2都有的行。
 

4、参数

在用comm命令时,可以使用-1、-2、-3、-12、-13、-23等参数,其中这些参数的含义如下:
-1:不显示在第一个文件中独有的行
-2:不显示在第二个文件中独有的行
-3:不显示两个文件中共有的行
 
可以把“-”理解为减号,-1就是输出时不打印第一列;-2就是不打印第二列,只打印第1列和第3列。
 

5、实例

file1:
aa
dd
bb
cc
ff
 
file2:
nn
oo
aa
 
从这里可以看出,第三列并没有把在两个文件中都有的行打印出来。这是因为在使用comm命令时,一定要先对文件做sort排序。
C02D37BHMD6T:~ lli$ comm file1 file2
aa
dd
bb
cc
ff
    nn
    oo
    aa
经过对文件排序后的对比
C02D37BHMD6T:~ lli$ cat file1 |sort > file3
C02D37BHMD6T:~ lli$ cat file2 |sort > file4
第一列可以看出是file3文件独有的,第二列为file4独有的,第三列为两个文件共有的。
C02D37BHMD6T:~ lli$ comm file3 file4
        aa
bb
cc
dd
ff
    nn
    oo

六、写在最后

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。

 

欢迎大家关注我的公众号,一起交流、学习。

 

作者:李先生

-------------------------------------------

个性签名:在平凡中坚持前行,总有一天会遇见不一样的自己!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

微信公众号 微信打赏 微信打赏

   微信公众号        微信打赏       支付宝打赏

原文地址:https://www.cnblogs.com/lemon-le/p/14457550.html