官方澳门新永利下载:Linux下文件相比较,四个文件内容相比较comm

title: Linux下文件对比(diff/comm/egrep)date: 2016-06-03comments:
truecategory: Linuxtags: linux, difff, comm, egrep/grep

现象

系统先给了一个文件A,后因为有新增记录,又给了一个文件B,现在要通过A、B找出这部分新增记录

comm

需要注意 `comm` 比较的时候文件是要求排序过的

不加参数的时候结果分“三行”显示,第一行是两个文件相同部分,第二行只存在于是“第一个”文件中的内容,第三行是只存在于“第二个”文件中的内容

root@pts/1 $ cat file1abcdefgroot@pts/1 $ cat file2abcdehijroot@pts/1 $ comm file1 file2 a b c d efg h i j

带参数:-1 不显示只在第1个文件里出现过的列。-2
不显示只在第2个文件里出现过的列。-3
不显示同时在第1和第2个文件里出现过的列。

root@pts/1 $ comm -1 file1 file2 a b c d ehijnewData [/tmp/data] 2016-06-03 15:33:08root@pts/1 $ comm -2 file1 file2 a b c d efgnewData [/tmp/data] 2016-06-03 15:33:13root@pts/1 $ comm -3 file1 file2fg h i j

同理 -1/-2/-3 可以组合使用comm -12 得到两个文件相同部分comm -13
得到只存在第二个文件中的部分comm -23 得到只存在第一个文件中的部分

root@pts/1 $ comm -13 file1 file2hijroot@pts/1 $ comm -23 file1 file2fgroot@pts/1 $ comm -12 file1 file2abcde
讲知识

通过查找,主要有三个Linux命令可以使用:

comm A B
diff A B
grep -f A B

egrep -f

egrep -f 相对来说更简单明了些

egrep -f file1 file2 相当于 comm -12 file1 file2得到相同部分

root@pts/1 $ egrep -f file1 file2abcd

egrep -f file1 -v file2 相当于 comm -13 file1 file2 得到只存在于第二个文件中的部分

root@pts/1 $ egrep -f file1 -v file2hij

egrep -f file2 -v file1 相当于 comm -23 file1 file2 得到只存在于第一个文件中的部分

root@pts/1 $ egrep -f file2 -v file1fg
comm

comm是对两个已经有序的文件进行比较,可以比较输出:仅在A中出现的、仅在B中出现的、在两个文件中都存在的。

官方澳门新永利下载 1

直接使用comm的话会输出三列,第一列为A独有的、第二列为B独有的、第三列为C独有的,如果在comm后面加数字,则指明不展示这一列。

常用参数:

comm -1 A B 不显示在A文件中独有内容(显示B文件独有内容+两个文件共有)
comm -2 A B 不显示在B文件中独有内容
comm -3 A B 不显示同时在两个文件中都存在的内容
comm -12 A B 显示A与B公共的部分
comm -23 A B 显示A独有的
comm -13 A B 显示B独有的

comm –help

用法:comm [选项]… 文件1 文件2
逐行比较已排序的文件文件1 和文件2。

如果不附带选项,程序会生成三列输出。第一列包含文件1特有的行,第二列包含文件2特有的行,而第三列包含两个文件共有的行。

-1 不输出文件1 特有的行
-2 不输出文件2 特有的行
-3 不输出两个文件共有的行

–check-order 检查输入是否被正确排序,即使所有输入行均成对
–nocheck-order 不检查输入是否被正确排序
–output-delimiter=STR 依照STR 分列
–help 显示此帮助信息并退出
–version 显示版本信息并退出

Note, comparisons honor the rules specified by ‘LC_COLLATE’.

示例:
comm -12 文件1 文件2 只打印在文件1 和文件2 中都有的行
comm -3 文件1 文件2 打印在文件1 中有,而文件2 中没有的行。反之亦然。

发表评论

电子邮件地址不会被公开。 必填项已用*标注