develooper Front page | perl.beginners | Postings from April 2012

Re: translate following files based on the last line of the previousfile

From:
lina
Date:
April 23, 2012 06:29
Subject:
Re: translate following files based on the last line of the previousfile
Message ID:
4F955915.5010702@gmail.com
On Monday 23,April,2012 01:27 AM, Jim Gibson wrote:
>
> On Apr 22, 2012, at 9:52 AM, lina wrote:
>
> Here is what I Have came up so far,
>>
>> #!/usr/bin/env perl
>>
>> use strict;
>> use warnings;
>> use autodie qw(open close);
>> use 5.012;
>>
>> my $dict = system("tail -n 1 text_1.xvg");
>
> Read the documentation on the system function. It does not return the output of the child process to your program. For that, you need the qx() operator, or backticks:
>
> my $dict = qx("tail -n 1 text_1.xvg");
>
>> print $dict;
>> print "\n\n";
>> open my $fh, "<","text_2.xvg";
>> while(<$fh>){
>> 	print $_;
>> }
>
> Of course, it is possible to read the last line of a file without resorting to creating a child process. See, for example, the module File::ReadBackwards.
>
>
Thanks.

Here I came up a working script (unavoidably clumsy).
I don't know how to refine it, or make it terse.

Thanks ahead for your time,


#!/usr/bin/env perl

use strict;
use warnings;
use autodie qw(open close);
use 5.012;

open my $fh1, "<","text_1.xvg";

my $lastline;
my %dict;
my @lastline;

my $n;

while(<$fh1>){
     $lastline = $_ if eof;
}

@lastline = split /[\t ]/,$lastline;
$n = shift @lastline;

foreach my $i (0..3){
     $dict{$i}=$lastline[$i]
}



open my $fh, "<","text_2.xvg";

my @old;

while(<$fh>){
     $n+=2;
     my @old = split /\s*/,$_;
     shift @old;
     foreach my $item (@old){
     s/$item/$dict{$item}/g;
     }
     print $n, "\t", join " ", @old;
     print "\n";
}



$ more text_1.xvg
0  	0 1 2 3
2	1 0 2 3
4	1 2 0 3



$ more text_2.xvg
0  	0 1 2 3
2	1 0 3 2
4	1 3 0 2



output
$ ./renumber_v1.pl
6	0 1 2 3
8	1 0 3 2
10	1 3 0 2


Best regards,



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About