in reply to How to map data from one column based on another column in perl
Output:#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my $filename = 'pedigree_proband_testfile.txt'; my %n = (birth_year=> 13, motherID=> 4, individualID=> 2, gender => +5); my %mominfo; open my $f, "<", $filename or die "ERROR: Cannot open $filename:$!"; while (<$f>){ chomp; my @c = split /\t/, $_; my $currentMomID = $c[ $n{motherID} ] || $c[ $n{individualID} ] or +die "No Mother ID in record nbr $.=$_;"; my $currentMom = $mominfo{ $currentMomID } ||= {}; # Create an empty + mom if she does not exist if ($currentMomID == $c[ $n{individualID} ]){ print "This is Mom ($currentMomID)'s main record: $_\n"; $currentMom->{birth_year} = $c[ $n{birth_year} ]; }else{ push @{ $currentMom->{CHILDREN} }, {ID=> $c[ $n{individualID} ] , + birth_year => $c[ $n{birth_ye +ar} ], gender => $c[ $n{gender} ]}; } } print Dumper \%mominfo;
This is Mom (2)'s main record: BC000 0 2 M + 999 $VAR1 = { '3' => { 'CHILDREN' => [ { 'gender' => 'F', 'birth_year' => '51', 'ID' => 1 }, { 'ID' => 4, 'birth_year' => ' 50', 'gender' => 'M' }, { 'gender' => 'F', 'birth_year' => '47', 'ID' => 5 }, { 'birth_year' => undef, 'gender' => 'F', 'ID' => 6 }, { 'gender' => 'M', 'birth_year' => '', 'ID' => 7 }, { 'gender' => 'F', 'birth_year' => '42', 'ID' => 8 }, { 'ID' => 9, 'birth_year' => '39', 'gender' => 'F' }, { 'birth_year' => '35', 'gender' => 'F', 'ID' => 10 } ] }, '8' => { 'CHILDREN' => [ { 'ID' => 11, 'gender' => 'M', 'birth_year' => ' 11' }, { 'birth_year' => ' 9', 'gender' => 'F', 'ID' => 12 } ] }, '2' => { 'birth_year' => '' }, '36' => { 'CHILDREN' => [ { 'ID' => 3, 'gender' => 'F', 'birth_year' => ' 65' } ] } };
Memory fault -- brain fried
|
|---|