A文件和B文件都含有id号,要求使A文件中的2列内容添加到B文件中具有相同id号的后面。 用perl实现,急急急
展开全部
open AFH,"fileA" or die;
my %ahash;
while(<AFH>)
{
my ($id,$colD,$colE) = (split /\t/)[2,3,4];
$ahash{$id} = "$colD\t$colE";
}
close AFH;
open BFH,"fileB" or die;
while(<BFH>)
{
chomp;
chop if (/\r$/);
my ($id) = (split /\t/)[-1];
if (exists $ahash{$id})
{
print "$_\t$ahash{$id}\n";
}
else
{
warn "$id is not exists in fileA!\n";
}
}
close BFH;
追问
太谢谢你了。成功了,可是有一个问题,在B文件中有些一行有多个id的,都没有添加结果显示。我老师写的一个比你麻烦,可是显示出来了,而且在同一行后面,用分号隔开了D行和E行的内容,您能想办法做到吗?
另外,我由于初次接触到perl,请问chop函数的功能你能跟我简单的说明一下吗?以及chop后面的if语句中的匹配模式/\r$/是什么意思吗,这个我不知道怎么用的,您能教我一下吗?可以留下一个qq?
追答
chop那行是为了去掉windows复制的时候产生的回车符(\r),windows下换行是由换行符和回车符一起组成的。至于b文件中如果含有多个id的话就处理下好了。
my $id = (split /\t/)[-1];
my @ids = split /;/ ,$id;
后面的@id跟随的内容就看你要怎么处理了,是放一起,还是分开处理
QQ号码的话,你私信我, 我跟你说
PS:我也是做生物信息的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询