私はコード作成にかなり慣れていませんが、私はしばしばファイルをマージし、IDと情報を2つのファイルにマッチさせるためにPerlを使用します。私は今まで何度も使用していたプログラムを使って2つのファイルを照合しようとしましたが、今回は動作していません。ここ2つのファイルをマージするスクリプト
コードである:
ファイル1:
501093 0 0 3162
2958 0 0 3163
1895 0 0 3164
1382 0 0 3165
2869 0 0 3166
2361 0 0 3167
754 0 0 3168
3163 0 0 3169
ファイル2:
つの入力ファイル形式からuse strict;
use warnings;
use vars qw($damID $damF $damAHC $prog $hash1 %hash1 $info1 $ID $sire $dam $F $FB $AHC $FA $hash2 %hash2 $info2);
open (FILE1, "<damF.txt") || die "$!\n Couldn't open damF.txt\n";
my $N = 1;
while (<FILE1>){
chomp (my $line=$_);
next if 1..$N==$.;
my ($damID, $damF, $damAHC, $prog) = split (/\t/, $line);
if ($prog){
$hash1 -> {$prog} -> {info1} = "$damID\t$damF\t$damAHC";
}
open (FILE2, "<whole pedigree_F.txt") || die "$!\n whole pedigree_F.txt \n";
open (Output, ">Output.txt")||die "Can't Open Output file";
while (<FILE2>){
chomp (my $line=$_);
next if 1..$N==$.;
my ($ID, $sire, $dam, $F, $FB, $AHC, $FA) = split (/\t/, $line);
if ($ID){
$hash2 -> {$ID} -> {info2} = "$F\t$AHC";
}
if ($ID && ($hash1->{$prog})){
$info1 = $hash1 -> {$prog} -> {info1};
$info2 = $hash2 -> {$ID} -> {info2};
print "$ID\t$info2\t$info1\n";
}
}
}
close(FILE1);
close FILE2;
close Output;
print "Done!\n";
及びこれらのスニペット
49327 20543 49325 0.077 0.4899 0.808 0.0484
49328 15247 49326 0.0755 0.5232 0.8972 0.0499
49329 27823 49327 0.0834 0.5138 0.8738 0.0541
column 4 in file 1
の値とcolumn 1 in file 2
の値を一致させたいとします。
さらに、一致する値をcolumns 2 and 3 in file 1
とcolumns 3 and 5 in file 2
から印刷したいとします。
また、それぞれのファイルに約のエントリがあることに言及する価値があります。それは私が作成した最初のハッシュをループされていないことを
11476 0.0362 0.3237 501093 0 0
11477 0.0673 0.4768 501093 0 0
11478 0.0443 0.2619 501093 0 0
注:
この
は私が取得しています出力されます。
何が問題になりますか? 2番目のファイル名のスペースが物事を投げ捨てる可能性はありますか?何かエラーがありますか? – Ilion
希望の出力を追加してください – dawg
最初のハッシュはループしていないようです。それはほとんどの場合、vars qw()のように思えます。ファイルで作業していません – user7675703