用perl 将两个文件合并,有相同ID的信息都列出来,一个没有的信息以NA替代

发布于2022-07-21 18:36:52

第一个文件 A B C D1 0.31 0.42 0.15 0.222 0.17 0.56 0.43 0.275 0.21 0.45 0.59 0.738 0.44 0.54 0.19 0.5710 0.32 0.42 0.51 0.50第二个文件 E F G1 0.87 0.75 0.888 0.49 0.81 0.7313 0.59 0.91 0.8814 0.54 0.71 0.67合并后成为: A B C D E F G1 0.31 0.42 0.15 0.22 0.87 0.75 0.882 0.17 0.56 0.43 0.27 NA NA NA 5 0.21 0.45 0.59 0.73 NA NA NA8 0.44 0.54 0.19 0.57 0.49 0.81 0.7310 0.32 0.42 0.51 0.50 NA NA NA13 NA NA NA NA 0.59 0.91 0.8814 NA NA NA NA 0.54 0.71 0.67上述文件均以tab键隔开的。

2个回答
admin
网友回答2022-07-21
程序代码: my(%d1,%d2,$str,$key,$val); my($id,$a,$b,$c,$d,$e,$f,$g); #读取文件1 open(FD,'1'); while(){   chomp;   ($id,$a,$b,$c,$d)=split(/\s+/);   $d1{$id}="$a\t$b\t$c\t$d"; } close(FD); #读取文件2 open(FD,'2'); while(){   chomp;   ($id,$e,$f,$g)=split(/\s+/);   $d2{$id}="$e\t$f\t$g"; } close(FD); #生成文件3 open(FD,'>3'); foreach $id (keys %d1){   print FD "$id\t".$d1{$id}."\t".(exists($d2{$id})?$d2{$id}:"NA\tNA\tNA")."\n";   delete($d2{$id}) if (exists($d2{$id})); } foreach $id (keys %d2){   print FD "$id\t".(exists($d1{$id})?$d1{$id}:"NA\tNA\tNA")."\t".$d2{$id}."\n"; } close(FD);运行拷屏: 搜狗问问
admin
网友回答2022-07-21
我是来看评论的

回到
顶部