in reply to Key-based diffs
#!/usr/bin/perl my ($prefijo, $n1, $n2)=@ARGV; my ($endOfFile1,$endOfFile2)=(0,0); open FILE1, "<".("0"x(8-length($n1)))."$n1"."\/$prefijo".".txt"; open FILE2, "<".("0"x(8-length($n2)))."$n2"."\/$prefijo".".txt"; open OUTPUTF1, ">$prefijo$n1"."NoEn$n2"; open OUTPUTF2, ">$prefijo$n2"."NoEn$n1"; open OUTPUTR1, ">repetidos\-$prefijo$n1"."NoEn$n2"; open OUTPUTR2, ">repetidos\-$prefijo$n2"."NoEn$n1"; my $recordf1=<FILE1> or $endOfFile1=1; my $recordf2=<FILE2> or $endOfFile2=1; my $key1, $key2; my $keyDos1, $keyDos2; my $firstpass=1; my $prevkey1, $prevkey2; my $prevkeyDos1, $prevkeyDos2; while ( !$endOfFile1 && !$endOfFile2 ) { unless ($recordf1 =~ /^[ -\~]*\n$/) { $recordf1=<FILE1> or $endOfFile1=1; next; } unless ($recordf2 =~ /^[ -\~]*\n$/) { $recordf2=<FILE1> or $endOfFile2=1; next; } if ($recordf1=~/^ *([0-9]+)\,/) { $prevkey1=$key1; $key1=$1; } else { undef $key1; } if ($recordf2=~/^ *([0-9]+)\,/) { $prevkey2=$key2; $key2=$1; } else { undef $key2; } if ( $key1 < $key2 ) { if (($key1 eq $prevkey1) && !$firstpass) { print OUTPUTR1 $recordf1 if $key1;} else { print OUTPUTF1 $recordf1 if $key1;} $recordf1=<FILE1> or $endOfFile1=1; } elsif ( $key1 > $key2 ) { if (($key2 eq $prevkey2) && !$firstpass) { print OUTPUTR2 $recordf2 if $key2;} else { print OUTPUTF2 $recordf2 if $key2;} $recordf2=<FILE2> or $endOfFile2=1; } else { if ($recordf1=~/\, *([0-9]+)\,/) { $prevkeyDos1=$keyDos1; $keyDos1=$1; } else { undef $keyDos1; } if ($recordf2=~/\, *([0-9]+)\,/) { $prevkeyDos2=$keyDos2; $keyDos2=$1; } else { undef $keyDos2; } if ( $keyDos1 < $keyDos2 ) { if (($keyDos1 eq $prevkeyDos1) && !$firstpass) { print OUTPUTR1 $recordf1 if $key1;} else { print OUTPUTF1 $recordf1 if $key1;} $recordf1=<FILE1> or $endOfFile1=1; } elsif ( $keyDos1 > $keyDos2 ) { if (($keyDos2 eq $prevkeyDos2) && !$firstpass) { print OUTPUTR2 $recordf2 if $key2;} else { print OUTPUTF2 $recordf2 if $key2;} $recordf2=<FILE2> or $endOfFile2=1; } else { $recordf1=<FILE1> or $endOfFile1=1; $recordf2=<FILE2> or $endOfFile2=1; } } $firstpass=0 if ($firstpass); } while ( !$endOfFile1 ) { unless ($recordf1 =~ /^[ -\~]*\n$/) { $recordf1=<FILE1> or $endOfFile1=1; next; } if ($recordf1=~/^ *([0-9]+)\, *([0-9]+)\,/) { $prevkey1=$key1; $prevkeyDos1=$keyDos1; $key1=$1; $keyDos1=$2; } else { undef $key1; undef $keyDos1; } if (($key1 eq $prevkey1) && ($keyDos1 eq $prevkeyDos1) && !$firstpas +s) { print OUTPUTR1 $recordf1 if $key1;} else { print OUTPUTF1 $recordf1 if $key1;} $recordf1=<FILE1> or $endOfFile1=1; $firstpass=0 if ($firstpass); } while ( !$endOfFile2 ) { unless ($recordf2 =~ /^[ -\~]*\n$/) { $recordf2=<FILE1> or $endOfFile1=1; next; } if ($recordf2=~/^ *([0-9]+)\, *([0-9]+)\,/) { $prevkey2=$key2; $prevkeyDos2=$keyDos2; $key2=$1; $keyDos2=$2; } else { undef $key2; undef $keyDos2; } if (($key2 eq $prevkey2) && ($keyDos2 eq $prevkeyDos2) && !$firstpas +s) { print OUTPUTR2 $recordf2 if $key2;} else { print OUTPUTF2 $recordf2 if $key2;} $recordf2=<FILE2> or $endOfFile2=1; $firstpass=0 if ($firstpass); } close FILE1; close FILE2; close OUTPUTF1; close OUTPUTF2; close OUTPUTR1; close OUTPUTR2;
|
|---|