INPUT data: R00009MM#R00009#2 C00027MM <=> C00007MM + 2 C00001MM R00014MM#R00014#C00022MM + C00068MM + C00080MM <=> C05125MM + C00011MM R00081MM#R00081#C00007MM + 4 C00126MM + 8 C00080MM <=> 4 C00125MM + 2 C00001MM + 4 C00080Cyto R00086MM#R00086#C00008MM + C00009MM + 7 C00080Cyto <=> C00002MM + C00001MM + 7 C00080MM R00094MM#R00094#2 C00051MM + C00003MM <=> C00127MM + C00004MM + C00080MM #### OUTPUT expected. R00081MM -> R00094MM R00014MM -> R00086MM R00081MM -> R00086MM R00086MM -> R00081MM R00094MM -> R00014MM R00009MM -> R00081MM #### #!/usr/bin/perl use warnings; use strict; open (IN, "input.txt") || die $!; #open (OUT,">output.txt") || die $!; my %groups; my @rxnGraph; while () { chomp $_; my @rxn = split /#/, $_; next if length $rxn[1] == 0; my ($left_side, $right_side) = split /\s*<=>\s*/, $rxn[2]; my @left_els = split /\s*\+\s*/, $left_side; my @right_els = split /\s*\+\s*/, $right_side; my $x=0; for ($x=0; $x<=$#left_els; $x++){ $left_els[$x]=~s/^[0-9]//; if($left_els[$x]=~/C.*/){ #print ">>",$left_els[$x],"\n" } } # print ">L>@left_els\n"; my $y=0; for ($y=0; $y<=$#right_els; $y++){ $right_els[$y]=~s/^[0-9]//; if($right_els[$y]=~/C.*/){ # print ">>>$right_els[$y]\n"; } } # print ">R>@right_els\n"; $groups{$_}{left} = $rxn[0] for @left_els; $groups{$_}{right} = $rxn[0] for @right_els; } #while( my ($keys, $values) = each(%groups)){ #print ">>K>>>$keys\n"; #} for my $grp (keys %groups) { if (2 == grep exists $groups{$grp}{$_}, qw/left right/) { print "$groups{$grp}{right} ->", " $groups{$grp}{left}\n"; # push @rxnGraph, "$groups{$grp}{right},", # " $groups{$grp}{left}\n"; } } #print OUT @rxnGraph;