我有一個包含這樣的數據的兩個文件:組合來自兩個文件散列成單個文件
FILE1包含組編號(第一列)和它們的開關的另一組(第二列)的頻率(第三列):
FILE1:
1 2 0.6
2 1 0.6
3 1 0.4
1 3 0.4
2 3 0.2
等...
FILE2包含組編號(第一列)和它們發生的頻率(第二列)。
FILE2:
1 0.9
2 0.7
3 0.5
等等
我想使含FILE2與從FILE1這樣每個開關的值另一個文件:
1 0.9 2 0.6 3 0.4 ...
2 0.7 1 0.6 3 0.2 ...
基本上,我希望第一列是組號,第二列是它出現的頻率,然後是它們切換到的組以及那個開關的頻率,然後下一個切換到同一行的所有p關鍵組,然後下一行 - 組2等
所以,我想在FILE1中讀取,爲每個組做一個數組的散列,其中鍵是組號,值是它們切換到的組以及該組的頻率開關。我將爲每個包含他們切換到的每個組的子陣列的組和每個組分配一個大陣列和頻率。然後我想使用與第一個散列相同的密鑰創建另一個散列,但使用FILE2中第一列的數字和FILE2第二列中的值。然後我將輸出「hash2 key hash2 value hash1 whole array for that key」。這是使用Perl我嘗試:
#!/usr/bin/perl -W
$input1= $ARGV[0];
$input2 = $ARGV[1];
$output = $ARGV[2];
%switches=();
open (IN1, "$input1");
while (<IN1>) {
@tmp = split (/\s+/, $_);
chomp @tmp;
$group = shift @tmp;
$switches{$group} = [@tmp];
push (@{$switches{$group}}, [@tmp]);
}
close IN1;
%groups=();
open (IN2, "$input2");
while (<IN2>) {
chomp $_;
($group, $pop) = split (/\s+/, $_);
$groups{$group} = $pop;
}
close IN2;
open (OUT, ">$output");
foreach $group (keys %groups) {
print OUT "$group $pop @{$switches{$group}}\n"
}
close OUT;
我得到的輸出包含類似:
1 0.1 2 0.1 ARRAY(0x100832330)
2 0.3 5 0.2 ARRAY(0x1008325d0)
所以基本上:
「組」,「最後一個頻率號」,「最後一個組該組切換到「」最後一個開關頻率「」沒有像ARRAY(0x100832330)「
我假設我做錯了,在FILE1中將所有開關推入陣列的散列並且在打印結束時也會在最後解除引用。
請幫忙, 謝謝!
請始終*在您編寫的每個Perl程序開始時使用strict和'warnings'。它可以爲您節省很多簡單的錯誤,尤其適用於您在尋求代碼幫助時。 – Borodin