我有一个包含这样的数据的两个文件:组合来自两个文件散列成单个文件
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