Vijay Kumar Adhikari <[EMAIL PROTECTED]> asked:
> I have some tab delimited text data like
> 
> ID    In      Out     Day
> 1     5       2       1
> 2     4       9       2
> 3     3       3       2
> 4     6       7       3
> 5     5       0       5
> 6     7       9       3
> 7     8       9       4
> 8     6       6       4
> 
> I want to perform sorting by In, Out and so on. I also want 
> to find sum of in out grouped by Day. Where should I start? 
> Is there any module that may help me? I am a beginner.

This has "SQL" written all over it ;-)

If you wanted to do it in Perl, the obvious way would
be to read in the file line by line and turn it into 
an hash of arrays, i.e.

#!/usr/bin/perl

use strict;
use warnings;

# read first line
my $line = <DATA>;

my %rec;

# sorting functions 
sub by_id {
  return $rec{$a}->[0] <=> $rec{$b}->[0];
}

sub by_in {
  return $rec{$a}->[1] <=> $rec{$b}->[1];
}

sub by_out {
  return $rec{$a}->[2] <=> $rec{$b}->[2];
}

sub by_day {
  return $rec{$a}->[3] <=> $rec{$b}->[3];
}

# list output
sub print_list {
  print "ID\tIn\tOut\tDay\n";
  foreach my $id (@_){
    printf "%d\t%d\t%d\t%d\n", @{$rec{$id}};
  }
  print "\n";
}

# read in data
while( $line = <DATA> ){
  my( @data ) = split /\s+/, $line;
  @{$rec{$data[0]}} = @data;
}

# print out sorted lists

print_list sort by_in keys %rec;

print_list sort by_out keys %rec;

print_list sort by_day keys %rec;

__DATA__
ID      In      Out     Day
1       5       2       1
2       4       9       2
3       3       3       2
4       6       7       3
5       5       0       5
6       7       9       3
7       8       9       4
8       6       6       4


I recommend you read the perllol manpage for the
list-of-lists syntax details, and the perlfaq on
sorting (perldoc -q sort).

HTH,
Thomas

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to