我们此处会用到 Linux 系统本身自带的命令 sort 和 uniq ,若您不熟悉,可以先行了解
前言
我们经常会面临对比两个文件的差异,举一个具体的例子:
两个服务器作为服务 S 的负载均衡,都部署了 nginx 做了一些规则重写,但是请求同一个地址的表现是不一样的;
此时第一反应就是对比两个服务器配置文件之间的区别,如果配置不多肉眼还能查看到,但是配置多了就只能依靠工具来进行了;这个时候,如果习惯了某些客户端的工具也是一直有效的处理方案,此处介绍 Linux 里面的处理方案!
求两个文件交集
1
| sort a.txt b.txt | uniq -d
|
sort a.txt b.txt 首先将文件 a.txt 和 b.txt 中的内容合并,并按行排序。
uniq -d 接着对排好序的结果进行去重,只显示重复出现过的行,也就是在 a.txt 和 b.txt 中都出现过的行。
求两个文件并集
sort a.txt b.txt 首先将文件 a.txt 和 b.txt 中的内容合并,并按行排序。
uniq 将排好序的文本进行去重。默认情况下,uniq 只能去除相邻的重复行,所以才有前面的 sort 结合管道进行处理
求两个文件差集
1 2 3 4 5
| sort a.txt b.txt b.txt | uniq -u
sort b.txt a.txt a.txt | uniq -u
|
以 a.txt - b.txt 为例子,意思是要求在 a.txt 中存在而在 b.txt 不存在的行。
sort a.txt b.txt b.txt 的两个 b.txt 就是为了去重的时候 b.txt 的所有行都能被剔除掉的
uniq -u 只输出出现一次的行,也就是经过管道处理后,只剩下 a.txt 存在而 b.txt 不存在的行了