On Thu, Jun 26, 2008 at 8:18 AM, vikingy <[EMAIL PROTECTED]> wrote: > Hi all, > > I have two files,one is label file,another is thickness file, they are one > to one correspondence, for example: > the label file is : 2 2 3 2 1 3 4 5 > 2 5 1 4 ...... > the thickness file is: 0.3 0.8 0.2 0.1 2.4 0.9 3.2 0.2 0.1 > 0.3 2.1 2.3 ...... > Now I want to calculate the sum and mean thickness of the same labeled, > just like this: > label 1 : 2.4 > label 2 : (0.3+0.8+0.1 +0.1)/4 > label 3 : (0.2+2.4)/2 > label 4 : (3.2+2.3)/2 > label 5 : (0.2+0.3)/2 > ....... > and then there is also a index [3 4] to select the label, so in the end ,I > want to get the sum and mean of (0.2+2.4)/2, (3.2+2.3)/2. > > I'm a beginner to perl, and don't know how to implement this with perl,could > you give me some suggestion? thanks in advance! > > bin lv
For the first part of your question: If the info in the file is all on one line, you can either (1) read in the entire line and use the split() function to split it up into an array or, if there is a fixed number of spaces between records, you can set local $/ = " "; (See perldoc perlvar) For a large amount of data, the second method would be faster. You can then use a hash to store the information for each label. __CODE__ my %data; open my $thicknessFH, "< thickness.txt" or die; open my $labelFH, "< labels.txt" or die; local $/ = " "; # Process the files while ( my $label = <$labelFH> ) { my $thickness = <$thicknessFH>; $data{ $label }{ 'count' }++; $data{ $label }{ 'thickness' } += $thickness; } # Display results for my $label ( sort keys %data ) { local $\ = "\n"; # Auto-append newlines to prints print "Label $label: " . ( $data{ $label }{ 'thickness' } / $data{ $label }{ 'count' }; } __END__ I don't fully understand how you'd like to deal with indexes like [3 4]... -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/