用perl 将两个文件合并,有相同ID的信息都列出来,一个没有的信息以NA替代
第一个文件ABCD10.310.420.150.2220.170.560.430.2750.210.450.590.7380.440.540.190.57100.320....
第一个文件
A B C D
1 0.31 0.42 0.15 0.22
2 0.17 0.56 0.43 0.27
5 0.21 0.45 0.59 0.73
8 0.44 0.54 0.19 0.57
10 0.32 0.42 0.51 0.50
第二个文件
E F G
1 0.87 0.75 0.88
8 0.49 0.81 0.73
13 0.59 0.91 0.88
14 0.54 0.71 0.67
合并后成为:
A B C D E F G
1 0.31 0.42 0.15 0.22 0.87 0.75 0.88
2 0.17 0.56 0.43 0.27 NA NA NA
5 0.21 0.45 0.59 0.73 NA NA NA
8 0.44 0.54 0.19 0.57 0.49 0.81 0.73
10 0.32 0.42 0.51 0.50 NA NA NA
13 NA NA NA NA 0.59 0.91 0.88
14 NA NA NA NA 0.54 0.71 0.67
上述文件均以tab键隔开的。 展开
A B C D
1 0.31 0.42 0.15 0.22
2 0.17 0.56 0.43 0.27
5 0.21 0.45 0.59 0.73
8 0.44 0.54 0.19 0.57
10 0.32 0.42 0.51 0.50
第二个文件
E F G
1 0.87 0.75 0.88
8 0.49 0.81 0.73
13 0.59 0.91 0.88
14 0.54 0.71 0.67
合并后成为:
A B C D E F G
1 0.31 0.42 0.15 0.22 0.87 0.75 0.88
2 0.17 0.56 0.43 0.27 NA NA NA
5 0.21 0.45 0.59 0.73 NA NA NA
8 0.44 0.54 0.19 0.57 0.49 0.81 0.73
10 0.32 0.42 0.51 0.50 NA NA NA
13 NA NA NA NA 0.59 0.91 0.88
14 NA NA NA NA 0.54 0.71 0.67
上述文件均以tab键隔开的。 展开
1个回答
展开全部
程序代码:
my(%d1,%d2,$str,$key,$val);
my($id,$a,$b,$c,$d,$e,$f,$g);
#读取文件1
open(FD,'1');
while(<FD>){
chomp;
($id,$a,$b,$c,$d)=split(/\s+/);
$d1{$id}="$a\t$b\t$c\t$d";
}
close(FD);
#读取文件2
open(FD,'2');
while(<FD>){
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);
运行拷屏:
更多追问追答
追问
你运行的结果A、B、C、D和E、F、G怎么跑到两行去了?抬头也不对。
追答
你没有对你的文件拷屏,我不知道你的文件究竟什么样子,我不知道你能否理解程序以及稍微修改,你是否明白程序为什么是这样的结果
你有没有用程序对你的数据进行测试,结果怎样?如果你的数据第一行在A前面有个ID或者其它的内容,你能想到输出是什么结果吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询