[实践OK]Linux文件比较操作comm命令实现文本文件的交集、差集与求差,一般求差集的多一些。

jackxiang 2017-6-23 15:34 | |
基本上有两个方法,一个是comm命令,一个是grep命令。分别介绍如下:
comm命令 , Compare sorted files FILE1 and FILE2 line by line. With  no options, produce three-column output.  Column one contains lines unique to FILE1, column two contains lines unique to FILE2, and column three contains lines common to both files. 要注意两个文件必须是排序和唯一(sorted and unique)的,默认输出为三列,第一列为是A-B,第二列B-A,第三列为A交B。这个哥们写得好,尽管我不懂linux文件流的用法,但是大致看出来了,我用了三个步骤,而用一行就搞定了,简单可用:http://m.blog.csdn.net/article/details?id=6579320


文件行数少最直观快捷的diff办法:
vimdiff <(sort a.txt|uniq) <(sort b.txt|uniq)

/proc/15750/fd/63 [只读]      /proc/15750/fd/62 [只读]
——————————————————————————————
一般求差集的多一些:
求差
comm a.txt b.txt  -3 | sed 's/^\t//'
差集
comm a.txt b.txt  -2 -3

实践如下:

sort getosok.txt >> getosoksort.txt
sort r11.txt >> r11sort.txt
comm r11sort.txt getosoksort.txt   -2 -3



再次实践,注意这两个文件都要去重,否则不太好比较,-2 -3显示左边文件有的右边没有的:
sort mysqlsort.txt|uniq   //sort结合uniq命令去重复行找出重复次数大于1的行参考:http://justwinit.cn/post/3671/

sort 主机层面能ssh连接的.txt |uniq >> 主机层面能ssh连接的排序过的去过重的.txt
sort 数据库应用开发现在的.txt |uniq >> 数据库 应用开发现在的排序过的去过重的.txt



comm  数据库应用开发现在的排序过的去过重的.txt 主机层能ssh连接的排序过的去过重的.txt   -2 -3
10.71.11.4*  //这个是列出左边有,右边文件没有的内容,也就是 “数据库应用开发现在的排序过的且去重的.txt”里有,而右边这个“主机层面能ssh连接的排序过的.txt” 没有。

comm 主机层面能ssh连接的排序过的去过重的.txt 数据库应用开发现在的排序过的 去过重的.txt -2 -3
10.70.*.42
10.70.*.53
10.70.*.1
10.70.*.2
10.71.*.29

注意:
1. comm命令要求输入文件的内容必须是排序且唯一的
2. comm -12 表示取消第一列和第二列的输出,即只输出第三列。[/warning]

主机层面能ssh连接的排序过的有,而右边没有。
http://www.ttlsa.com/linux/linux-file-comparison-operations-text-file-of-the-intersection-difference-sets-and-difference/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/9234/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2017-6-24 12:43
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]