in reply to Comparing lines of multiple files
I am trying to compare all of the lines from three files and then print the result to a final file.
But your code and data samples involve only two input files, not three. Next, you said:
If the ids are not the same, I don't want it to write anything to the final file unless one of the ids was blank, but I do want to write them if they are the same, such as:
But you show an example for "Final" output that has one line where the two inputs were identical (no diffs), followed by two lines whose index values exist only in "file 1". (And what do you mean, exactly, by "unless one of the ids was blank"?)
Maybe part of the problem is that you don't have an accurate and coherent spec for what the script is supposed to do? If there really are just two inputs, and those three lines you show under "Final:" are really the correct desired output, then it looks like the spec would be something like this:
For each line in File 1, print it to Final if: (a) the ID/Key value and data are identical to a line in File 2, or (b) the ID/Key value is not found in File 2.
For that, the following is one way to do it:
use strict; my ( $file1, $file2 ) = @ARGV; # (getting file names from command line is better than hard-coding the +m) # read file2 first, to get the keys and data to test against my %refdata; open( F, $file2 ) or die "$file2: $!"; while (<F>) { my ( $key, $data ) = split( /,/, $_, 2 ); # (in case key is not 4 + digits) $refdata{$key} = $data; } # now read file1, and output lines that meet the spec open( F, $file1 ) or die "$file1: $!"; while (<F>) { my ( $key, $data ) = split( /,/, $_, 2 ); print if ( !exists( $refdata{$key} ) or $data eq $refdata{$key} ); } # (use the command line to redirect output to a "final" file -- e.g.: # # shell> perl your_script file1 file2 > final # # again, it's better than hard-coding another file name
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Comparing lines of multiple files
by Zed_Lopez (Chaplain) on Oct 09, 2005 at 19:52 UTC | |
by oomwrtu (Novice) on Oct 09, 2005 at 23:06 UTC | |
by Tortue (Scribe) on Oct 11, 2005 at 11:02 UTC |