文件比较命令(comp)

来源:http://www.youlihuishou.com 作者:杏彩平台注册网址-操作系统 人气:128 发布时间:2019-10-10
摘要:comp命令:   comm命令可用于两个文件之间的比较。它有很多不错的选项可用来调整输出,以便我们执 行交集、求差(difference)以及差集操作。  交集:打印出两个文件所共有的行。

comp命令:

 

comm命令可用于两个文件之间的比较。它有很多不错的选项可用来调整输出,以便我们执
行交集、求差(difference)以及差集操作。
 交集:打印出两个文件所共有的行。
 求差:打印出指定文件所包含的且互不相同的那些行。
 差集:打印出包含在文件a中,但不包含在其他指定文件中的那些行。

  // 描述:

cmp

假设现在有两个文件a和b,内容分别是:a(1,2,3),b(3,4,5)。那么,对这两个文件进行操作的结果如下。
交集:3。
杏彩平台注册网址,求差:1,2,4,5。
差集(a):1,2。

    逐字节比较两个文件或文件集的内容。 如果在没有参数的情况下使用,comp会提示你输入要比较的文件。

[功能说明]

需要注意的是comm必须使用排过序的文件作为输入。请看看下面的例子:

  // 语法:

比较文件

[root@host1 shell]# echo -e "1n3n8n2" > a.txt
[root@host1 shell]# cat a.txt 
1
3
8
2
[root@host1 shell]# echo -e "1n5n7n2" > b.txt
[root@host1 shell]# cat b.txt 
1
5
7
2
[root@host1 shell]# sort a.txt  -o a.txt ; sort b.txt -o b.txt

    comp [<Data1>] [<Data2>] [/d] [/a] [/l]  [/c] [/n=<Number>]

#cmp可以比较任何类型的文件,并在标准输出设备上显示文件的第一次不同处的行号和字节号,分别从1开始,但是一般用于比较文本文件

(1) 首先执行不带任何选项的comm:

  // 参数:

[语法格式]

[root@host1 shell]# comm a.txt b.txt 
        1
        2
3
    5
    7
8

    <data1> :  指定要比较的第一个文件或文件集的位置和名称。 可以使用通配符(*和?)指定多个文件。

Cmp[参数][文件1][文件2][skip1][skip2]

输出的第一列包含只在a.txt中出现的行(a的差集),第二列包含只在b.txt中出现的行(b的差集),第三列
包含a.txt和b.txt中相同的行(交集)。各列以制表符(t)作为定界符。

    <data2>:   指定要比较的第二个文件或文件集的位置和名称。 可以使用通配符(*和?)指定多个文件。

[选项参数]

(2) 为了打印两个文件的交集,我们需要删除第一列和第二列,只打印出第三列:

    /d:(decimal)    以十进制格式显示差异。 (默认格式为十六进制。)

参数

说明

-l

显示两个比较文件每个不同点的字节号和字节数,前者以十进制显示,后者以八进制显示

-s

不显示错误信息就退出

[root@host1 shell]# comm -1 -2 a.txt b.txt 
1
2

    /a:     将差异显示为字符。

 

(3) 打印出两个文件中不相同的行:

    /l:(line number) 显示出现差异的行号,而不是显示字节偏移量。

comm

[root@host1 shell]# comm -3 a.txt b.txt 
3
    5
    7
8

    /c:     执行不区分大小写的比较。

[功能说明]

在这次的输出中,那些唯一出现的行使得列中出现了空白字段。所以这两列在同一
行上不会同时都出现内容。为了提高输出结果的可用性,需要删除空白字段,将两
列合并成一列:

    /n     仅比较为每个文件指定的行数,即使文件大小不同。

比较文件

3
5
7
8

  // 说明:

 #comm可逐行比较两个排序的文件,并根据用户的指定选项输出结果到屏幕或者重新定向到一个文件,用于有序文件的比较

(4) 要生成规范的输出,得使用下面的命令:

处理 Data1和Data2的特殊情况:
  --> 如果省略Data1或Data2的必要组件,或者省略Data2,comp会提示您输入缺少的信息。
  --> 如果Data1仅包含驱动器号或没有文件名的目录名,则comp会将指定目录中的所有文件与Data1中指定的文件进行比较。
  --> 如果Data2仅包含驱动器号或目录名,则Data2的默认文件名与Data1中的默认文件名相同。
  --> 如果comp找不到您指定的文件,它会提示您一条消息,以确定是否要比较更多文件。

[语法格式]

[root@host1 shell]# comm -3 a.txt b.txt | sed 's/^t//'
3
5
7
8

比较不同位置的文件:
  Comp可以比较同一驱动器或不同驱动器上的文件,以及相同目录或不同目录中的文件。 当comp比较文件时,它会显示它们的位置和文件名。

Comm[参数]文件1 文件2 [>|>>文件名]

(5) 通过删除不需要的列,我们就可以分别得到a.txt和b.txt的差集。
a.txt的差集
$ comm a.txt b.txt -2 -3
-2 -3 删除第二列和第三列。
b.txt的差集
$ comm a.txt b.txt -1 -3
-1 -3 删除第一列和第三列。

比较不同大小的文件:
  您必须指定 /n 来比较不同大小的文件。 如果文件大小不同且未指定 /n,则comp将显示以下消息:

[选项参数]

工作原理:

Files are different sizes

参数

说明

-1

抑制第1行的显示,既在文件1中出现的内容不显示

-2

抑制第2行的显示,既在文件1中出现的内容不显示

-3

抑制第3行的显示,既在文件1和文件2中同时出现的内容不显示

comm的命令行选项可以按照需求对输出进行格式化,例如:
 -1 从输出中删除第一列;
 -2 从输出中删除第二列;
 -3 从输出中删除第三列。
  在生成统一输出时,sed命令通过管道获取comm的输出。它删除行首的 t字符。sed中的s
表示替换(substitute)。/^t/ 匹配行前的 t(^是行首标记)。//(两个/操作符之间没有任何
字符)是用来替换行首的t的字符串。如此一来,就删除了所有行首的t。
  差集操作允许你比较两个文件,打印出只在a.txt或b.txt中出现的行。当a.txt和b.txt作为comm
命令的参数时,输出中的第一列是a.txt相对于b.txt的差集,第二列是b.txt相对于a.txt的差集。

Compare more files (Y/N)?

只是做的一个总结 如有不对,请各位大牛批评指教。

  // 实例:

                                          此致敬礼

    杏彩平台注册网址 1

版权声明

              ### 这个 comp 命令显示出来的一点都不好看,明显没有 fc 好看。还是用 fc 习惯些!!!

本总结所涉及到的内容 全部摘抄自《Linux命令完全技术宝典》张栋

本文由杏彩彩票app发布于杏彩平台注册网址-操作系统,转载请注明出处:文件比较命令(comp)

关键词:

最火资讯