一个用于比较两个文件行中不同的Perl脚本

diff虽然也可以比较文件,但是工作中出现了两个文件中行的内容实际相同,但是顺序不同的情况(同一个文件中不会出现完全相同的行)。为了找出这些文件中的行差集,写了这么个脚本。

用法:diffSet fileA fileB

输出:

如果文件不同,在控制台输出只在fileA中出现的行的行数,及只在fileB中出现的行的行数,并将这些行分别输出到fileA.diff及fileB.diff两个文件中

如果文件相同,则输出两个文件相同的信息

file: diffSet

 

  
  
  
  
  1. #!/usr/bin/perl -w 
  2. use strict; 
  3.  
  4. my ($fileA,$fileB) = @ARGV; 
  5.  
  6. open A,'<',$fileA or die "Unable to open file:$fileA:$!"
  7. my %ta; 
  8. my $i;  
  9. while(<A>){ 
  10.   chomp; 
  11.   $ta{$_} = ++$i;  
  12.  
  13. close A; 
  14.  
  15. open B,'<',$fileB or die "Unable to open file:$fileB:$!"
  16. my @B;  
  17. while(<B>){ 
  18.     chomp; 
  19.     unless (defined $ta{$_}){ 
  20.         push @B,$_; 
  21.     }else
  22.         $ta{$_} = 0
  23.     }    
  24. close B; 
  25.  
  26. # Output diff to different files respectively 
  27.  
  28. open DIFF_A, ">$fileA.diff" or die "Unable to create diff file for $fileA:$!"
  29. my $countA; 
  30. print "Remain in files $fileA\n"
  31. my %tt = reverse %ta; 
  32.  
  33. foreach (keys %tt) { 
  34.     $countA += $_>0print DIFF_A $tt{$_}."\n":0
  35.  
  36. print "$countA lines\n"
  37.  
  38. close DIFF_A; 
  39.  
  40. open DIFF_B, ">$fileB.diff" or die "Unable to create diff file for $fileB:$!"
  41. my $countB = scalar @B;  
  42. print DIFF_B $_."\n" foreach @B;  
  43.  
  44. if ($countA == 0 and $countB ==0 ){ 
  45.     print STDOUT "The two files are identical\n"
  46.  
  47. close DIFF_B; 

 

本文出自 “业余码农南瓜” 博客,转载请与作者联系!

你可能感兴趣的:(perl)