How to find max value at the number was decide after sort the data?
Hi all,
I am trying to make script to find the max value at the number that was decided by user.
The data has two colum [fw] and [rw] and I hope I can find the max values of each colum.
I sued the script to sort data but I can not find the first value. I mean
5 1 10 0
#!/usr/bin/perl;
use strict;
use warnings;
use Data::Dumper;
my $n = 31;#Decided position
my $put = 'thu1.txt';
my $filename = 'hoi.txt';
open my $fh, '<', $filename or die "Failed to open $filename: $!";
open my $fh1, '>',$put or die "Failed to open $put: $!";
my $i =1;
while (<$fh>){
next if m/^#/;#Skip comment lines
my @array = ();
foreach (1 .. $n){
my $rec = <$fh>;
last unless defined $rec;
$rec =~ s/\s*$//;#Remove spaces or newline characters from end
push @array, $rec;
}
@array = sort {my ($sa, $sa1) = split /\s+/, $a;
my ($sb,$sb1) = split /\s+/, $b;
$sb <=> $sa;} @array;
foreach(@array){
print $fh1 "$i\t$_\n";
$i++;
}
}
and then I used small script to find the max value
#!/usr/bin/perl;
use strict;
use warnings;
my $put = 'thu1.txt';
open my $fh, '<', $put or die "Failed to open $put: $!";
print "nhap so vao ";
my $so =<STDIN>;
while (<$fh>){
chomp($fh);
my $rec = $fh;
my ($nu, $fw, $rw) =split (/\t/,$_);
chomp ();
#print "$po\n";
if ($nu <= $so) {print "$nu\t$fw\t$rw"}
}
Could you show me what wrong in that script and how to make it by one script? thank you very much.
Not really sure what is going now, but I will take a guess. I think this does what you want. The first value was lost in the read at the top of the while loop. That is why I changed the order where $rec is read.
Hope this helps.
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
# Not sure what this is really used for
my $n = 31; #Decided position
my $filename = 'hoi.txt';
open my $fh, '<', $filename or die "Failed to open $filename: $!";
my $i =1;
# Why this loop and the other?
while (my $rec = <$fh>){
next if $rec =~ m/^#/; #Skip comment lines
my @array = ();
# Again, not sure why the loop in here
# Why one $n times?
foreach (1 .. $n){
last unless defined $rec;
$rec =~ s/\s*$//; #Remove spaces or newline characters from end
push @array, $rec;
$rec = <$fh>;
}
@array = sort { my ($sa, $sa1) = split /\s+/, $a;
my ($sb,$sb1) = split /\s+/, $b;
$sb <=> $sa;
} @array;
print "nhap so vao ";
my $so =<STDIN>;
foreach (@array){
print "$i\t$_\n";
last if ($i++ >= $so);
}
}
close($fh);
Not really sure what is going now, but I will take a guess. I think this does what you want. The first value was lost in the read at the top of the while loop. That is why I changed the order where $rec is read.
Hope this helps.
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
# Not sure what this is really used for
my $n = 31; #Decided position
my $filename = 'hoi.txt';
open my $fh, '<', $filename or die "Failed to open $filename: $!";
my $i =1;
# Why this loop and the other?
while (my $rec = <$fh>){
next if $rec =~ m/^#/; #Skip comment lines
my @array = ();
# Again, not sure why the loop in here
# Why one $n times?
foreach (1 .. $n){
last unless defined $rec;
$rec =~ s/\s*$//; #Remove spaces or newline characters from end
push @array, $rec;
$rec = <$fh>;
}
@array = sort { my ($sa, $sa1) = split /\s+/, $a;
my ($sb,$sb1) = split /\s+/, $b;
$sb <=> $sa;
} @array;
print "nhap so vao ";
my $so =<STDIN>;
foreach (@array){
print "$i\t$_\n";
last if ($i++ >= $so);
}
}
close($fh);
Thank you for help.
How can I do if I want to search all the data hoi.txt and it did not decide at n=31 beacuse I will use the script to run data (data size 87800 KB).
Again, I'm not too sure if this is what you want but try:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
# Not sure what this is really used for
my $filename = 'hoi.txt';
open my $fh, '<', $filename or die "Failed to open $filename: $!";
my $i =1;
my @array = ();
# Loop thru all of the data in the file
while (my $rec = <$fh>){
next if $rec =~ m/^#/; #Skip comment lines
$rec =~ s/\s*$//; #Remove spaces or newline characters from end
push @array, $rec;
}
close($fh);
# Sort all of the data that was in the file
@array = sort { my ($sa, $sa1) = split /\s+/, $a;
my ($sb,$sb1) = split /\s+/, $b;
$sb <=> $sa;
} @array;
print "nhap so vao ";
my $so =<STDIN>;
foreach (@array){
print "$i\t$_\n";
last if ($i++ >= $so);
}
Again, I'm not too sure if this is what you want but try:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
# Not sure what this is really used for
my $filename = 'hoi.txt';
open my $fh, '<', $filename or die "Failed to open $filename: $!";
my $i =1;
my @array = ();
# Loop thru all of the data in the file
while (my $rec = <$fh>){
next if $rec =~ m/^#/; #Skip comment lines
$rec =~ s/\s*$//; #Remove spaces or newline characters from end
push @array, $rec;
}
close($fh);
# Sort all of the data that was in the file
@array = sort { my ($sa, $sa1) = split /\s+/, $a;
my ($sb,$sb1) = split /\s+/, $b;
$sb <=> $sa;
} @array;
print "nhap so vao ";
my $so =<STDIN>;
foreach (@array){
print "$i\t$_\n";
last if ($i++ >= $so);
}
Thanks a lot histrungalot!
It run well. your help show me know what wrong in my script.