linux五分钟对比两个linux 文件对比工具

下次自动登录
现在的位置:
& 综合 & 正文
Linux Shell下求两个文件的交集差集
经常会用到比较两个文件中相同行的数量,也就是把文件当作集合,求集合的交集差集等。
假设有两个文件a.file和b.file,分别代表集合A和集合B。
a.file的内容如下:
b.file的内容如下:
可选用的命令有两个,comm和grep。分别介绍下:
comm命令可以求出两个文件的比较结果。默认输出三列,分别表示A-B,B-A 和 A交B。
对a.file和b.file的直接执行结果如下:
$ comm a.file b.file
1)comm命令要求输入文件的内容必须是排序且唯一的
2)comm -12 表示取消第一列和第二列的输出,即只输出第三列。
grep命令是常用来搜索文本内容的,根据输入的pattern,输出命中的内容。可以利用它的文件输入pattern特性,来求两个文件的交集。
$ grep -F -f a.file b.file
那差集可以利用-v这个参数,例如:
$ grep -F -v -f a.file b.file
$ grep -F -v -f b.file a.file
其中第一个命令求B-A,第二个命令求A-B
1)grep求交集不要求输入文件是排序的,但最好是唯一的
2)差集时注意输入文件的顺序
&&&&推荐文章:
【上篇】【下篇】您还可以使用以下方式登录
当前位置:&>&&>& > linux比较文件输出不同的内容
linux比较文件输出不同的内容
  linux比较文件输出不同的内容  目前据我所了解的有如下几种方法,来比较两个文件的行,以输出他们的不同之处:  1) comm mission:  comm [-123] file1 file2 [& sfile]  NOTE: file1,file2 must be firstly sorted !  -1/2/3 means: -1 ----- rid the only retained contents in file1  -2 ----- rid the only retained contents in file2  -3 ----- rid the communal lines in both two files  正如,上面说的那样,comm命令运用的前提是针对两个sorted文件!  该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用&- &,则表示从标准输入读取。  选项1、2或3抑制相应的列显示。例如comm - 12就只显示在两个文件中都存在的行;comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行;comm - 123则什么也不显示。  2) grep mission:  grep -v -f file1 file2  /*注::此法在对比数字时候比较凑效果,文本对比不建议使用*/  3) awk mission:  awk '{print NR,$0}' file1 file2 |sort -k2|uniq -u -f 1|sort -k1|awk '{print $2}'  或者:  awk '{print $0}' file1 file2 |sort|uniq -u  4) diff mission:  diff [-opt] file1 file2&&&&&&& 注:更多精彩教程请关注三联电
脑教程栏目,三联电脑办公群:欢迎你的加入
欢迎转载:
推荐:    Shell脚本对比两个文本文件找出不同行的2个方法分享
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Shell脚本对比两个文本文件找出不同行的2个方法分享,本文分别使用comm命令法、grep命令法实现,需要的朋友可以参考下
亲自实验过的方法如下:
第一种:comm命令法
命令如下:comm -3 file1 file2
有一个问题就是,如果两个文件排序不一样的话,会出问题
第二种:grep命令法
命令如下:grep -vwf file1 file2
统计file1中没有,file2中有的行
具体使用环境以后再补充,今天先记录到这里。
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Linux diff --比较两个文件并输出不同之处 - 博客频道 - CSDN.NET
老莫小小朋友
Standing on Shoulders of Giants
分类:shell
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。
1.命令格式:
diff[参数][文件1或目录1][文件2或目录2]
2.命令功能:
diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff 命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。
3.命令参数:
-& 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。
&-a或--text&diff预设只会逐行比较文本文件。
-b或--ignore-space-change& 不检查空格字符的不同。
-B或--ignore-blank-lines& 不检查空白行。
-c& 显示全部内文,并标出不同之处。
-C或--context& 与执行&-c-&指令相同。
-d或--minimal& 使用不同的演算法,以较小的单位来做比较。
-D或ifdef& 此参数的输出格式可用于前置处理器巨集。
-e或--ed& 此参数的输出格式可用于ed的script文件。
-f或-forward-ed& 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。
-H或--speed-large-files& 比较大文件时,可加快速度。
-l或--ignore-matching-lines&若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。
-i或--ignore-case& 不检查大小写的不同。
-l或--paginate& 将结果交由pr程序来分页。
-n或--rcs& 将比较结果以RCS的格式来显示。
-N或--new-file& 在比较目录时,若文件A仅出现在某个目录中,预设会显示:Onlyin目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-p& 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
-P或--unidirectional-new-file&与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。
-q或--brief& 仅显示有无差异,不显示详细的信息。
-r或--recursive& 比较子目录中的文件。
-s或--report-identical-files& 若没有发现任何差异,仍然显示信息。
-S或--starting-file& 在比较目录时,从指定的文件开始比较。
-t或--expand-tabs& 在输出时,将tab字符展开。
-T或--initial-tab& 在每行前面加上tab字符以便对齐。
-u,-U或--unified=& 以合并的方式来显示文件内容的不同。
-v或--version& 显示版本信息。
-w或--ignore-all-space& 忽略全部的空格字符。
-W或--width& 在使用-y参数时,指定栏宽。
-x或--exclude& 不比较选项中所指定的文件或目录。
-X或--exclude-from& 您可以将文件或目录类型存成文本文件,然后在=中指定此文本文件。
-y或--side-by-side& 以并列的方式显示文件的异同之处。
--help& 显示帮助。
--left-column& 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。
--suppress-common-lines& 在使用-y参数时,仅显示不同之处。
4.使用实例:
实例1:比较两个文件
[root@localhost&test3]#&diff&log2014.log&log2013.log&
上面的“3c3”和“8c8”表示log2014.log和log20143log文件在3行和第8行内容有所不同;&11,12d10&表示第一个文件比第二个文件多了第11和12行。
diff 的normal 显示格式有三种提示:
c - change
d - delete
实例2:并排格式输出
diff log2013.log log2014.log&-y -W 50
[root@localhost&test3]#&diff&log2014.log&log2013.log&&-y&-W&50
2013-01&&&&&&&&&&&&&&&&&2013-01
2013-02&&&&&&&&&&&&&&&&&2013-02
2014-03&&&&&&&&&&&&&&&|&2013-03
2013-04&&&&&&&&&&&&&&&&&2013-04
2013-05&&&&&&&&&&&&&&&&&2013-05
2013-06&&&&&&&&&&&&&&&&&2013-06
2013-07&&&&&&&&&&&&&&&&&2013-07
2013-07&&&&&&&&&&&&&&&|&2013-08
2013-09&&&&&&&&&&&&&&&&&2013-09
2013-10&&&&&&&&&&&&&&&&&2013-10
2013-11&&&&&&&&&&&&&&&&
2013-12&&&&&&&&&&&&&&&&
[root@localhost&test3]#&diff&log2013.log&log2014.log&&-y&-W&50
2013-01&&&&&&&&&&&&&&&&&2013-01
2013-02&&&&&&&&&&&&&&&&&2013-02
2013-03&&&&&&&&&&&&&&&|&2014-03
2013-04&&&&&&&&&&&&&&&&&2013-04
2013-05&&&&&&&&&&&&&&&&&2013-05
2013-06&&&&&&&&&&&&&&&&&2013-06
2013-07&&&&&&&&&&&&&&&&&2013-07
2013-08&&&&&&&&&&&&&&&|&2013-07
2013-09&&&&&&&&&&&&&&&&&2013-09
2013-10&&&&&&&&&&&&&&&&&2013-10
&&&&&&&&&&&&&&&&&&&&&&&&2013-11
&&&&&&&&&&&&&&&&&&&&&&&&2013-12
“|”表示前后2个文件内容有不同
“&”表示后面文件比前面文件少了1行内容
“&”表示后面文件比前面文件多了1行内容
实例3:上下文输出格式
diff log2013.log log2014.log&-c
[root@localhost&test3]#&diff&log2013.log&log2014.log&&-c
***&log2013.log&&16:36:26.&+0800
---&log2014.log&&18:01:54.&+0800
***************
***&1,10&****
---&1,12&----
+&2013-11
+&2013-12[root@localhost&test3]#&diff&log2014.log&log2013.log&&-c
***&log2014.log&&18:01:54.&+0800
---&log2013.log&&16:36:26.&+0800
***************
***&1,12&****
---&1,10&----
&&2013-10[root@localhost&test3]#
这种方式在开头两行作了比较文件的说明,这里有三中特殊字符:
“+”比较的文件的后者比前着多一行
“-”比较的文件的后者比前着少一行
“!”比较的文件两者有差别的行
实例4:统一格式输出
diff log2014.log log2013.log&-u
[root@localhost&test3]#&diff&log2014.log&log2013.log&&-u
---&log2014.log&&18:01:54.&+0800
+++&log2013.log&&16:36:26.&+0800
@@&-1,12&+1,10&@@
+2013-03
+2013-08
它的第一部分,也是文件的基本信息:
---log2014.log
18:01:54. +0800
+++log2013.log
16:36:26. +0800
&---&表示变动前的文件,&+++&表示变动后的文件。
第二部分,变动的位置用两个@作为起首和结束。
&& @@ -1,12 +1,10 @@
前面的&-1,12&分成三个部分:减号表示第一个文件(即log2014.log),&1&表示第1行,&12&表示连续12行。合在一起,就表示下面是第一个文件从第1行开始的连续12行。同样的,&+1,10&表示变动后,成为第二个文件从第1行开始的连续10行。
实例5:比较文件夹不同
diff &test3 test6
[root@localhosttest]# diff test3 test6
Onlyin test6: linklog.log
Onlyin test6: log2012.log
difftest3/log2013.log test6/log2013.log
&hostnames=true
difftest3/log2014.log test6/log2014.log
Onlyin test6: log2015.log
Onlyin test6: log2016.log
Onlyin test6: log2017.log
[root@localhosttest]#
实例6:比较两个文件不同,并生产补丁
diff -ruN log2013.log log2014.log &patch.log
[root@localhost&test3]#&diff&-ruN&log2013.log&log2014.log&&patch.log
[root@localhost&test3]#&ll
-rw-r--r--&2&root&root&&80&12-07&16:36&log2013.log
-rw-r--r--&1&root&root&&96&12-07&18:01&log2014.log
-rw-r--r--&1&root&root&248&12-07&21:33&patch.log
[root@localhost&test3]#&cat&patc.log
cat:&patc.log:&没有那个文件或目录
[root@localhost&test3]#&cat&patch.log&
---&log2013.log&&16:36:26.&+0800
+++&log2014.log&&18:01:54.&+0800
@@&-1,10&+1,12&@@
+2014-03
+2013-07
+2013-11
+2013-12[root@localhost&test3]#
实例7:打补丁
[root@localhost&test3]#&cat&log2013.log
2013-10[root@localhost&test3]#&patch&log2013.log&patch.log&
patching&file&log2013.log
[root@localhost&test3]#&
[root@localhost&test3]#&cat&log2013.log&
2013-12[root@localhost&test3]#
mosesmo1989
排名:千里之外
(17)(186)(4)(5)(5)(0)(11)(1)(0)(3)(0)(0)(0)(1)(1)(2)(3)(0)(0)(1)(2)(2)(3)(0)(0)(0)(0)(0)}

我要回帖

更多关于 linux 对比文件差异 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信