in reply to regarding file from the directory and executing some commands and placing the out put on exceel sheet.

I'm struggling to understand your output as you don't seem to have any filenames starting with Gkel or should it be
Gkel_check.1.ABC.dat.gz Gkel_check.1.ABC.dat check.1.ABC_TT1.dat check.1.AB_TT1.dat
poj
  • Comment on Re: regarding file from the directory and executing some commands and placing the out put on exceel sheet.
  • Download Code

Replies are listed 'Best First'.
Re^2: regarding file from the directory and executing some commands and placing the out put on exceel sheet.
by Perlseeker_1 (Acolyte) on Jun 21, 2013 at 07:22 UTC
    Hi,

    Please find the results

    my @array; my @Gkel=(); my @Gkel_gz=(); my @Check=(); my @files; opendir( DIR, $dir ); my @files = grep( /$pattern/, readdir(DIR) ); closedir(DIR); chdir($dir); foreach my $file (@files) { if ( $file =~ m/^Gkel_/ ){ if ( substr($file, -2) eq 'gz' ) { my $result = `gunzip -c $file|tail -1`; system(`gunzip -f $file`); my $count = substr($result,22,8); $Gkel_gz[0] = $file; $Gkel_gz[1] = $count; } else { my $result = `wc -l $file`; my ($count, $file_name) = split(' ',$result); my $file1 = substr($file,5); system(`mv $file $file1`); $Gkel[0] = $file1; $Gkel[1] = $count; } } if ( $file =~ m/^check.*Check.dat$/ ){ my $result = `wc -l $file`; my ($count, $file_name) = split(' ',$result); push @Check,[$file,$count]; } } my $Count = $Gkel_gz[1]; my $Count1 = $Gkel[1] - $Check[1]->[1] ; my @row = ('Jun-2013',$Gkel_gz[0],$Count,$Count,$Check[0]->[0],$Check[ +0]->[1],$Gkel[0],$Count1,$Count1,'TRUE',$Check[1]->[0],$Check[1]->[1] +); print join ',',@row,"\n"; print "@row\n"; }

    Outpuy

    Jun-2013,Gkel_Check.I.Jun13.dat.gz,00108418,00108418,Check.I.ABC_TT1.d +at,278,,-470,-470,TRUE,Check.I.AB_TT1.dat,470, Jun-2013 Gkel_Check.I.Jun13.dat.gz 00108418 00108418 Check.I.ABC_TT1.d +at 278 -470 -470 TRUE Check.I.AB_TT1.dat 470

    my expected results are as below

    output

    Jun-2013 Gkel_check.1.ABC.dat.gz 108418 108418 check.1.ABC_TT1.dat 470 + Gkel_check.1.ABC.dat 107670 107670 TRUE<br> Check.I.AB_TT1.dat 278

    470 + 278 should be deducted from the 108418 and answer is 107670
    both lines should come separately

      Try this. I have replaced your hash with numeric keys with a simple 2D array. You will need to activate the lines marked ##, comment out or remove those marked #test, print to the file your want and build your @files array using readdir.

      #!perl use strict; use warnings; my @test = (470,278); #test my @Gkel=(); my @Gkel_gz=(); my @TT1=(); my @files = qw( Gkel_check.1.ABC.dat.gz Gkel_check.1.ABC.dat check.1.ABC_TT1.dat check.1.AB_TT1.dat ); foreach my $file (@files) { if ( $file =~ m/^Gkel_/ ){ if ( substr($file, -2) eq 'gz' ) { ## my $result = `gunzip -c $file|tail -1`; ## system(`gunzip -f $file`); ## my $count = substr($result,22,8); my $count = 108418; #test $Gkel_gz[0] = $file; $Gkel_gz[1] = $count; } else { ## my $result = `wc -l $file`; ## my ($count, $file_name) = split(' ',$result); my $file1 = substr($file,5); my $count = 107948; #test ## system(`mv $file $file1`); $Gkel[0] = $file1; $Gkel[1] = $count; } } if ( $file =~ m/^check.*TT1.dat$/ ){ ## my $result = `wc -l $file`; ## my ($count, $file_name) = split(' ',$result); my $count = shift @test; #test push @TT1,[$file,$count]; } } # Expected #Gkel_check.1.ABC.dat.gz 108,418 108,418 #check.1.ABC_TT1.dat 470 #check.1.ABC.dat 107,670 107,670 TRUE #check.1.AB_TT1.dat 278 my $Count = $Gkel_gz[1]; my $Count1 = $Gkel[1] - $TT1[1]->[1] ; my @row = ('Jun-2013', $Gkel_gz[0],$Count,$Count, $TT1[0]->[0],$TT1[0]->[1], $Gkel[0],$Count1,$Count1, 'TRUE', $TT1[1]->[0],$TT1[1]->[1]); print join ',',@row,"\n"
      poj
      It would have been better to reply to my post rather than update the existing node.
      There is something not quite right here ;
      Var Output Expected --- ------------------------- ----------------------- $Gkel_gz[0] Gkel_Check.I.Jun13.dat.gz Gkel_check.1.ABC.dat.gz $Count 00108418 108418 $Count 00108418 108418 $Check[0][0] Check.I.ABC_TT1.dat check.1.ABC_TT1.dat $Check[0][1] 278 470 $Gkel[0] , Gkel_check.1.ABC.dat $Count1 -470 107670 $Count1 -470 107670 $Check[1][0] Check.I.AB_TT1.dat Check.I.AB_TT1.dat $Check[1][1] 470 278
      You said the files were like this
      Gkel_check.1.ABC.dat.gz Gkel_check.1.ABC.dat check.1.ABC_TT1.dat check.1.AB_TT1.dat
      I don't understand how you can you get Gkel_Check.I.Jun13.dat.gz in the output ? Also, how does this match m/^check.*Check.dat$/ give these
      Check.I.ABC_TT1.dat Check.I.AB_TT1.dat
      in the output ?
      poj
        Hi,

        sorry for the confusion

        Gkel_check.1.ABC.dat.gz Gkel_check.1.ABC.dat check.1.ABC_TT1.dat check.1.AB_TT1.dat
        if (($file=~ m/^Gkel_/) && (substr($file, -2) eq 'gz')) { my $result = `gunzip -c $file|tail -1`; $Count = substr($result,22,8); system(`gunzip -f $file`); $Orig_file = $file;

        The above condition i am using to fetch the files starts with Gkel_ abd ends with gz

        fetch the zip file and execute tail command to get the count

        and execute gunzip to uncompress the file, here i will take the file name and count

        elsif ($file=~ m/^check.*TT1.dat$/) my $result = `wc -l $file`; my ($count, $file_name) = split(' ',$result); $result{$hashkey}->[0] = $file_name; $result{$hashkey}->[1] = $count; $hashkey++;

        The above code to fetch the two files check.1.ABC_TT1.dat and check.1.AB_TT1.dat

        execute the wc -l to get the count here also i will take the file name and count

        opendir( DIR, $dir ); my @files = grep( /$pattern/, readdir(DIR) ); closedir(DIR); chdir($dir); foreach my $file (@files) { if (($file=~ m/^Gkel_/) && (substr($file, -2) ne 'gz')) { my $result = `wc -l $file`; my ($count, $file_name) = split(' ',$result); $file1 = substr($file,5,50); $Orig_file1 = $file_name; $Count1 = $count; system(`mv $file $file1`); } }

        The above code will take the unzipped file Gkel_check.1.ABC.dat and

        and move the file from Gkel_check.1.ABC.dat to check.1.ABC.dat

        execute the wc -l to get the count here also i will take the file name and count

        Output what i am expecting is:

        June-2013 Gkel_check.1.ABC.dat.gz count check.1.ABC_TT1.dat count chec +k.1.ABC.dat.gz count

        This is the first line the above output should contain a line with zip file name and its count

        Then check.1.ABC_TT1.dat and its count and unzipped file name and count

        check.1.AB_TT1.dat

        In second line i need just only check.1.AB_TT1.dat file name and its count

        regards,