作者adu (^_^)
看板Perl
标题[问题] 合并三个档案中的资料
时间Tue May 4 00:19:16 2010
FILE1:
name1,chrA1
name2,chrA2
name3,chrA3
...
FILE2:
name1,chrB1
name2,chrB2
name3,chrB3
...
FILE3:
name1,chrC1
name2,chrC2
name3,chrC3
...
要将output变成:
name1,chrA1,chrB1,chrC1
name2,chrA2,chrB2,chrC2
name3,chrA3,chrB3,chrC3
...
每个file都有20万笔
我现在是用while(
while(
while(
)
)
)
的方式比对,很没效率而且会out of memory XD
并附加error "Use of uninitialized value $Name1 in string"
请教板大们有没有比较好的方法呢?
谢谢板大:)
附上我的script:
##!/usr/bin/perl
use strict;
use warnings;
my $file1 = "A.txt";
open FILE1, $file1 or die "File open error!!";
my $fileOUT = ">OUTPUT.txt";
open FILE0, $fileOUT or die "File open error!!";
while(<FILE1>){
chomp($_);
my $Line1 = $_;
if($Line1 =~ /(.+?),(.+)/){
my $Name1 = $1;
my $CHR1 = $2;
my $file2 = "B.txt";
open FILE2, $file2 or die "File open error!!";
while(<FILE2>){
chomp($_);
my $Line2 = $_;
if($Line2 =~ /(.+?),(.+)/){
my $Name2 = $1;
my $CHR2 = $2;
if($Name1 eq $Name2){
my $file3 = "C.txt";
open FILE3, $file3 or die "File open error!!";
while(<FILE3>){
chomp($_);
my $Line3 = $_;
if($Line3 =~ /(.+?),(.+)/){
my $Name3 = $1;
my $CHR3 = $2;
if($Name1 eq $Name3){
print FILE0 "$Name3,$CHR1,$CHR2,$CHR3\n";
}
}
}
}
}
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.197.110
※ 编辑: adu 来自: 140.113.197.110 (05/04 00:49)