#!/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 $firstpass=1; my $prevkey1, $prevkey2; while ( !$endOfFile1 && !$endOfFile2 ) { 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;} else { print OUTPUTF1 $recordf1;} $recordf1=<FILE1> or $endOfFile1=1; } elsif ( $key1 > $key2 ) { if (($key2 eq $prevkey2) && !$firstpass) { print OUTPUTR2 $recordf2;} else { print OUTPUTF2 $recordf2;} $recordf2=<FILE2> or $endOfFile2=1; } else { $recordf1=<FILE1> or $endOfFile1=1; $recordf2=<FILE2> or $endOfFile2=1; } $firstpass=0 if ($firstpass); } while ( !$endOfFile1 ) { if ($recordf1=~/^ *([0-9]+)\,/) { $prevkey1=$key1; $key1=$1; } else { undef $key1; } if (($key1 eq $prevkey1) && !$firstpass) { print OUTPUTR1 $recordf1;} else { print OUTPUTF1 $recordf1;} $recordf1=<FILE1> or $endOfFile1=1; $firstpass=0 if ($firstpass); } while ( !$endOfFile2 ) { if ($recordf2=~/^ *([0-9]+)\,/) { $prevkey2=$key2; $key2=$1; } else { undef $key2; } if (($key2 eq $prevkey2) && !$firstpass) { print OUTPUTR2 $recordf2;} else { print OUTPUTF2 $recordf2;} $recordf2=<FILE2> or $endOfFile2=1; $firstpass=0 if ($firstpass); } close FILE1; close FILE2; close OUTPUTF1; close OUTPUTF2; close OUTPUTR1; close OUTPUTR2;
In reply to Key-based diffs by haroldo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |