小公举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)。
欢迎大家关注我的公众号,一起交流、学习。