diff虽然也可以比较文件,但是工作中出现了两个文件中行的内容实际相同,但是顺序不同的情况(同一个文件中不会出现完全相同的行)。为了找出这些文件中的行差集,写了这么个脚本。
用法:diffSet fileA fileB
输出:
如果文件不同,在控制台输出只在fileA中出现的行的行数,及只在fileB中出现的行的行数,并将这些行分别输出到fileA.diff及fileB.diff两个文件中
如果文件相同,则输出两个文件相同的信息
file: diffSet
#!/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;总结
以上是内存溢出为你收集整理的一个用于比较两个文件行中不同的Perl脚本全部内容,希望文章能够帮你解决一个用于比较两个文件行中不同的Perl脚本所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)