#!/usr/bin/perl # https://perlmonks.org/?node_id=1224208 use strict; use warnings; use Data::Dump 'dd'; my $file1 = <<END; name foo num 111 222 333 444 name jack num 999 111 222 333 num 333 444 555 777 END my $file2 = <<END; name jack num 999 111 222 333 num 333 444 555 777 name foo num 666 222 333 444 END my %hash1 = gethash($file1); my %hash2 = gethash($file2); #dd 'file1', \%hash1, 'file2', \%hash2; print "\t\tFile1\t\t\t\t\tFile2\n"; print "Name\tX1\tY1\tX2\tY2\t\tX1\tY1\tX2\tY2\n"; for my $key ( keys %hash1 ) { my $name = $key; for ( match( $hash1{$key}, $hash2{$key} ) ) { print "$name\t$_\t\t$_\n"; $name = ''; } } sub match { my ($one, $two) = @_; my @same; for my $item (@$one) { push @same, grep $item eq $_, @$two; } return @same; } sub gethash { local $_ = shift; s/^\s+//gm; s/[ \t]+/\t/g; my %hash; while( /^name\s+(\S+)\n(num.*\n)*/gm ) { my $name = $1; $hash{$name} = [ $& =~ /^num\s*(.*)/gm ]; } return %hash; }
Outputs :
File1 File2 Name X1 Y1 X2 Y2 X1 Y1 X2 + Y2 jack 999 111 222 333 999 111 222 + 333 333 444 555 777 333 444 555 + 777
In reply to Re: how to push multiples row of values into hash and do comparison
by tybalt89
in thread how to push multiples row of values into hash and do comparison
by darkmoon
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |