如何在perl的foreach循环中写入多个输出文件?

时间:2013-07-10 17:56:25

标签: perl foreach output histogram

我有两个来自原子探针的不同输入文件:

1)包含4列的POS文件,x y z i(我从二进制转换)

2)RRNG文件,包含样本中原子的信息及其对应的“i”值。

我能够从输入文件中提取所有必要的信息并将它们存储到数组中,但是当我尝试将信息保存到多个输出文件时出现问题。

这是我到目前为止所做的:

foreach $j (0..50) {    #there are 51 peaks in this data set
    $min = $range_min[$j];
    $max = $range_max[$j];
    open(POS,$ARGV[1]);
    while(sysread(POS,$xyzi,16)) {   #input is binary
        @row=unpack("f>4",$xyzi);
        if ($row[3]>$min && $row[3]<=$max) { #if "i" value within
                                             #the given range
            open(FILE,">file$min_$max.txt");
            print FILE join(" ",@row[0,1,2,3]) . "\n";
        }
    }
}

我想要的是在POS文件中搜索“{i}”和$min之间的“i”值的所有数据点,并将这些点存储为x,y,z和i列中的输出文件,但我想对所有51个“i”值范围执行此操作。

此代码适用于没有foreach循环的一个峰值,但我不想对51个不同范围进行硬编码。

我希望这很清楚。感谢。

1 个答案:

答案 0 :(得分:1)

这是一个基本的例子:

open my $fin,   '<', $inputfile or die $!;
open my $fout1, '>', $filename1 or die $!;
open my $fout2, '>', $filename2 or die $!;

while( my $line = <$fin> ) {
    print $fout1 $line;
    print $fout2 $line;
}

只需打开多个文件句柄并打印到每个文件句柄。