这个脚本用于求两个文件不同的行所构成的差集,即A中存在而B中不存在的行,及B中存在而A中不存在的行.
代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51#!/usr/bin/perl -w
use strict;
my ($fileA,$fileB) = @ARGV;
open A,'<',$fileA or die "Unable to open file:$fileA:$!";
my %ta;
my $i;
while(<A>){
chomp;
$ta{$_} = ++$i;
}
close A;
open B,'<',$fileB or die "Unable to open file:$fileB:$!";
my @B;
while(<B>){
chomp;
unless (defined $ta{$_}){
push @B,$_;
}else{
$ta{$_} = 0;
}
}
close B;
# Output diff to different files respectively
open DIFF_A, ">$fileA.diff" or die "Unable to create diff file for $fileA:$!";
my $countA;
print "Remain in files $fileA\n";
my %tt = reverse %ta;
foreach (keys %tt) {
$countA += $_>0? print DIFF_A $tt{$_}."\n":0;
}
print "$countA lines\n";
close DIFF_A;
open DIFF_B, ">$fileB.diff" or die "Unable to create diff file for $fileB:$!";
my $countB = scalar @B;
print DIFF_B $_."\n" foreach @B;
if ($countA == 0 and $countB ==0 ){
print STDOUT "The two files are identical\n";
}
close DIFF_B;
用于比较两个文件不同的行差集
欢迎关注
- Post link: http://tiramisutes.github.io/2015/07/29/perl-diff.html
- Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.