Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Perl: How to print unmatched data after comparison of two files? 1

Status
Not open for further replies.

wwq

Programmer
Jun 5, 2013
4
IE
I have two files here (file 1 & file 2). I would like to match name in bold as shown below from both files. However I need to print those unmatched data in file 1 format. I have been trying the code below but it is not the result I want. How to print those unmatched data in file 1 format after matching?


file 1

ID alan135/xkr $work(b05bfn00un0c3)/b05bfn00un0c3 ; #<= b05bfn00un0d0 Size:5848.270996
ID John06/ext $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID lily099/poli $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID sam012/pp $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID lily099/poli $wwrk(b05bfn00ld0p8)/b05bfn00ld0p8 ; #<= b05bfn00ld0s0 Size:INFINITY
ID Steve9018 $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
..
..
.


file 2

Accept => John06/ext Max
Accept => vivian788/ppr Maxcap
Accept => suzan645/pp Min
Accept => lily099/poli Max
Accept => Nick5670/uu Max
Accept => Anne309/pej Min
..
..
.


code

my ($line1,$line2,@arr1,@arr2,@arr3,@emptyarr);

@arr1 = <FILE1>;

@arr2 = <FILE2>;

foreach $line2 (@arr2) {

if ($line2 =~ m/(.*)\s+(.*)\s+(.*)\s+(.*)/) {

@arr3 = @emptyarr;
my $cname2 = "$2";
push (@arr3, $cname2);

}
}

foreach $line2 (@arr3) {
foreach $line1 (@arr1) {

if ($line1 =~ m/(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)/) {

my $cname1 = "$2";

if ($cname1 ne $line3) {

print NL "$cname1\n";

}
}
}
}


expected result:

ID John06/ext $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID lily099/poli $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID lily099/poli $wwrk(b05bfn00ld0p8)/b05bfn00ld0p8 ; #<= b05bfn00ld0s0 Size:INFINITY


 
Hi

Something like this ?
Code:
[gray]# found[/gray]
[blue]master #[/blue] perl -naF'\s' -e '[b]if[/b][teal]([/teal][i][green]"file2"[/green][/i][b]eq[/b]$ARGV[teal]){[/teal][b]push[/b]@a,$F[2];[b]next[/b][teal]}[/teal][b]print[/b] [b]if[/b]$F[1]~~@a' file2 file1
ID John06/ext $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID lily099/poli $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID lily099/poli $wwrk(b05bfn00ld0p8)/b05bfn00ld0p8 ; #<= b05bfn00ld0s0 Size:INFINITY

[gray]# not found[gray]
[blue]master #[/blue] perl -naF'\s' -e '[b]if[/b][teal]([/teal][i][green]"file2"[/green][/i][b]eq[/b]$ARGV[teal]){[/teal][b]push[/b]@a,$F[2];[b]next[/b][teal]}[/teal][b]print[/b] [b]unless[/b]$F[1]~~@a' file2 file1
ID alan135/xkr $work(b05bfn00un0c3)/b05bfn00un0c3 ; #<= b05bfn00un0d0 Size:5848.270996
ID sam012/pp $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID Steve9018 $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY


Feherke.
feherke.github.io
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top