Thanks all for your reply
reformatted the date as below:
order mtime no size id day date
14098703993 154538.354300 200 1 101510
14098703993 154539.420000 200 1 101511
14098703994 154538.398200 487 1 100888
14098703994 154610.720000 487 1 91588
14098703995 154538.401200 200 1 101502
14098703995 154539.420000 200 1 101500
use List::Util qw(max min);
my %id_hash;
open (DATA, ".txt");
while (<DATA>) {
chomp;
my ($order, $mtime, $size, $id, $date) = split /\t/;
push @{ $id_hash{$order}{$id}{mtime} }, $mtime;
push @{ $id_hash{$order}{$id}{size } }, $size;
push @{ $id_hash{$order}{$id}{date } }, $date;
}
open (OUT, ">output.txt");
for my $order (keys %id_hash) {
for my $id (keys %{ $id_hash{$order} }) {
my $Low = min( @ { $id_hash{$order}{$id}{mtime} } );
print OUT "$order $Low \n";
}
}
Now the problem is this does not give duplicate order entires!
I think I am unable to do the below:
I want the duplicate order values as it is.
Unable to replace the oldest mtime into the date field.
So now I am doing the below stupid code which will be the loooongest code of my life...:
open (OUT, ">output.txt");
open (IN, "input1.txt");->original file1 with all data
while($line=<IN>){ chomp($line);
($Date,$MTime,$inserdate,$inserttime,$Id,$Phase,$Size,$day,$order)
+= split(/ /,$line);
open (INL, "file2.txt");-->contains the sorted order values of order v
+alues($x) from file 1
while($linel=<INL>){ chomp($linel);
($x,$y,$z,$q,$t)= split(/ /,$linel);
if($x == $order)
{ #print OUT "$a $x $b $z $q $t \n";
print OUT $Date," ",$M_Time," ",$inserdate," ",$y," ",$Id," ",$Pha
+se," ",$Size," ",$day," ",$order,"\n";
}
}
}
close(INL);
close(IN);
close(OUT);
print "DONE";
Hope it makes sense to you.. am not an expert in Perl.. just trial and error guys.. but now really need ur help...plzzz! |