找出两个文件内容的相同与不同

http://blog.sina.com.cn/s/blog_b37976350102x7jw.html

1. comm命令
          功能说明:比较两个已排过序的文件。(使用sort排序)
          语  法:comm [-123][--help][--version][第1个文件][第2个文件]
           补充说明:这项指令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成3栏显示:第1栏仅是在第1个文件中出现过的记录,第2栏是仅在第2个文件中出现过的记录,第3栏则是在第1与第2个文件里都出现过的记录。若给予的文件名改为"-",则comm指令会从标准输入设备读取数据。
参  数:
  -1   不显示只在第1个文件里出现过的列。
  -2   不显示只在第2个文件里出现过的列。
  -3   不显示只在第1和第2个文件里出现过的列。
  --help   在线帮助。
  --version   显示版本信息。
例子
comm - 12     就只显示在两个文件中都存在的行;
comm - 23    只显示在第一个文件中出现而未在第二个文件中出现的行;
comm - 123  则什么也不显示。

2. diff 命令
      功能说明:比较文件的差异。
      语  法:diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]
       补充说明:diff以逐行的方式,比较文本文件的异同处。所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

 例如: 找出a.txt文件有而b.txt文件中没有的放在c.txt文件中

 

  1. #!/bin/sh  
  2. # author by tianmo  
  3. # date 2011-11-21 20:33  
  4. #BEGIN  
  5. cat a.txt | sort | uniq | sort > a_u.txt  
  6. cat b.txt | sort | uniq | sort > b_u.txt  
  7. diff   a_u.txt  b_u.txt | grep /<  | awk ' $1 = " " ' > c.txt  
  8. # END
                                                                                                                                                                                                                                              

  3  比较两个文件并删除相同部分

 

        方法一:

  comm -23 file1 file2

  方法二:

  grep -v -f file1 file2

  

  方法三:

  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. shell删除两个文件相同部分

 方法一:使用grep

grep -v -f file1 file2 &&  grep -v -f file2 file1
 参数-v,表示invert match,即反向匹配,输出没有匹配上的项。参数-f,表示从文件中读取匹配模板(pattern)。方法一中的前一部分,在文件file1中匹配模板,来反向匹配文件file2中的内容,即输出文件file2中,在file1中没有的内容。后面的一部分同理可得,输出文件file1中,在file2中没有的内容。
方法二:实用comm 
comm -3 file1 file2

如果使用--nocheck-order参数,不进行有序性检测,结果如下:

$ comm -3 --nocheck-order file1 file2

        line0
line2

        line2

 从这个结果中我们可以看到,这还是不是我们真正想要的结果。这里可体现comm的另一个特征,就是逐行比较。它是对file1和file2进行逐行往下的比较,检测是否相同。所以,在用comm的时候,要根据具体的情况进行分析了。

方法三:使用awk

 

补充的重要内容:

1、统计两个文本文件的相同行

grep -Ff file1 file2

2、统计file1中有,file2中没有的行

grep -vFf file1 file2

grep -Fvxf <(grep -Fxf file1 file2 ) file1 file2

如何比较两个文件并去删除相同的内容

for i in $(>tmp1 ; done

输出相同行:

$grep -wf file1 file2

输出不同行

 $grep -wvf file1 file2

 

posted on 2017-06-13 15:40  guolongnv  阅读(2528)  评论(0)    收藏  举报