Linux文件比较操作---文本文件的交集、差集与求差
2014-03-23 00:00
309 查看
最近公司业务调整,需要对属于百度某公司的域名进行剥离分开,属于本公司的域名更改掉。 域名非常之多之杂乱。各自分别整理手上的域名, 后面再整理无家可归的域名。 这就需要对文件进行操作,也就是把文件当作集合,求集合的交集差集等等集合论相关的数学理论。 下面介绍两个命令:
1. comm命令 comm命令可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。有三列内容:分别表示A-B,B-A 和 A交B。 相关集合论解释: 交集:打印出两个文件所共有的行。 求差:打印出指定文件所包含的且不相同的行。 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。 实例:
1.1 交集 打印两个文件的交集,需要删除第一列和第二列:
1.2 求差 打印出两个文件中不相同的行,需要删除第三列:
1.3 差集 通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集:
1.3.1 aaa.txt的差集
1.3.2 bbb.txt的差集
注意1: 1. comm命令要求输入文件的内容必须是排序且唯一的 2. comm -12 表示取消第一列和第二列的输出,即只输出第三列。[/warning]
2. grep命令 grep命令是常用来搜索文本内容的,根据输入的pattern,输出命中的内容。可以利用它的文件输入pattern特性,来求两个文件的交集。
2.1 交集
2.2 差集
2.2.1 aaa.txt - bbb.txt的差集
2.2.2 bbb.txt - aaa.txt的差集
注意2: 1. grep求交集不要求输入文件是排序的,但最好是唯一的 2. 差集时注意输入文件的顺序[/warning] 大家可能注意到了,comm与grep求差集的结果却不同,当我们在使用comm命令前,先对aaa.txt和bbb.txt进行排序操作后,再比较。结果如下:
运维生存时间: http://www.ttlsa.com/html/3726.html
1. comm命令 comm命令可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。有三列内容:分别表示A-B,B-A 和 A交B。 相关集合论解释: 交集:打印出两个文件所共有的行。 求差:打印出指定文件所包含的且不相同的行。 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。 实例:
# cat aaa.txt aaa bbb ccc ddd eee 111 222 # cat bbb.txt bbb ccc aaa hhh ttt jjj # comm aaa.txt bbb.txt aaa bbb ccc aaa ddd eee 111 222 hhh ttt jjj 第一列 第二列 第三列输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。 格式化输出选项: -1:从输出中删除第一列 -2:从输出中删除第二列 -3:从输出中删除第三列
1.1 交集 打印两个文件的交集,需要删除第一列和第二列:
# comm aaa.txt bbb.txt -1 -2 bbb ccc
1.2 求差 打印出两个文件中不相同的行,需要删除第三列:
# comm aaa.txt bbb.txt -3 | sed 's/^\t//' aaa aaa ddd eee 111 222 hhh ttt jjjsed 's/^\t//' 是将制表符(\t)删除,以便把两列合并成一列。
1.3 差集 通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集:
1.3.1 aaa.txt的差集
# comm aaa.txt bbb.txt -2 -3 aaa ddd eee 111 222
1.3.2 bbb.txt的差集
# comm aaa.txt bbb.txt -1 -3 aaa hhh ttt jjj[warning]
注意1: 1. comm命令要求输入文件的内容必须是排序且唯一的 2. comm -12 表示取消第一列和第二列的输出,即只输出第三列。[/warning]
2. grep命令 grep命令是常用来搜索文本内容的,根据输入的pattern,输出命中的内容。可以利用它的文件输入pattern特性,来求两个文件的交集。
2.1 交集
# grep -F -f aaa.txt bbb.txt bbb ccc aaa
2.2 差集
2.2.1 aaa.txt - bbb.txt的差集
# grep -F -v -f bbb.txt aaa.txt ddd eee 111 222
2.2.2 bbb.txt - aaa.txt的差集
# grep -F -v -f aaa.txt bbb.txt hhh ttt jjj[warning]
注意2: 1. grep求交集不要求输入文件是排序的,但最好是唯一的 2. 差集时注意输入文件的顺序[/warning] 大家可能注意到了,comm与grep求差集的结果却不同,当我们在使用comm命令前,先对aaa.txt和bbb.txt进行排序操作后,再比较。结果如下:
# sort aaa.txt > aaa1.txt # sort bbb.txt > bbb1.txt # comm aaa1.txt bbb1.txt 111 222 aaa bbb ccc ddd eee hhh jjj ttt A-B B-A这结果才与grep的结果相同。 转载请注明来自
运维生存时间: http://www.ttlsa.com/html/3726.html
相关文章推荐
- Linux文件比较,文本文件的交集、差集与求差
- linux_coom _ Linux文件比较,文本文件的交集、差集与求差
- 第二十二章 Linux文件比较,文本文件的交集、差集与求差:comm命令
- Linux下的操作文件(三、比较文件内容的命令)
- Linux下C语言的文本文件读写(fputc,fgetc,fwrite,fread对文件读写操作)
- 求两个Linux文本文件的交集、差集、并集
- Linux 求文件交集 差集等
- Linux 两个文件求交集、并集、差集
- linux文件交集差集
- linux文件交集差集
- linux求两个文件的交集,并集,差集
- linux:使用comm命令比较两个文件:交集、差
- php数组操作之键名比较与差集、交集赋值的方法
- C语言文件操作标准库函数与Linux系统函数效率比较
- linux命令求两个文件的交集、差集、并集等
- linux文本排序、交集、差集,查找并删除重复文件脚本、comm命令
- linux shell 脚本攻略学习10--生成任意大小的文件和文本文件的交集与差集详解
- linux:使用comm命令比较两个文件:交集、差
- linux 文本文件的交集,差集 comm命令
- php数组操作之键名比较与差集、交集赋值的方法