Piping and assigning output to a variable in Perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Piping and assigning output to a variable in Perl
# 1  
Old 05-07-2009
Piping and assigning output to a variable in Perl

Hi All,

I am trying to convert the below Csh code into Perl.
But i have the following error.
Can any expert help ?

Error:
ls: *tac: No such file or directory


Csh
[code]
set $ST_file = `ls -rt *$testid*st*|tail -1`;

Perl
Code:
my $ST_file = `ls -rt *$testid*st*|tail -1`;


Last edited by Raynon; 05-13-2009 at 10:28 AM..
# 2  
Old 05-07-2009
if you want to use Perl, at least read up on Perl before attempting things like this. with Perl, there is no need to use shell commands like ls.
the ways you can read a directory includes using opendir() and readdir(), or even the while loop
eg while (<*.txt>) { .... }
# 3  
Old 05-07-2009
Hi Ghostdog,

I have a code below.
But i do not know whether this simulates "ls -rt *$testid*st*| tail -1"
Can you give some guidance ?


Code:
while (<*$testid*st*>) {
       my $ST_file = sprint{"%s",$_};
       last;
}

# 4  
Old 05-07-2009
why do you need sprint if you are just going to print out the files? by the way, its sprintf not sprint. if the results of ls and your perl script does not match, then its not correct . you just simply try to run the script and see.
if you want to sort by latest time last, (-rt) you can get the file time and file name in a hash, then sort the hash. perldoc -f sort for more info.
# 5  
Old 05-12-2009
Hi,

I have the below code.
But it doesn;t seem to work.
Can you help ?


Code:
use File::stat;
my @file_match = (<*$tester*st*>);
for ( $count = 1 ; $count <= $#file_match ; $count++ ) {
        open (FILE_MATCHED,"< $file_match[$count]");
        open (LIST,">> $TEMP/list");
        print LIST "$file_match[$count]\n";
        my @STAT = stat(FILE_MATCHED);
        push (my @time_stamp , $STAT[10]);
        print LIST "$file_match[$count] $STAT[10]\n";
        close (LIST);
        close (FILE_MATCHED);
   
}
my @sorted = sort { $a <=> $b } my @time_stamp;
open (LIST, "< $TEMP/list");
        while ( $line=<LIST> ) {
                my @Fld = split(' ', $line);
                print "$#sorted\n";
                if ( $Fld[2] == $sorted[$#sorted] ) {
                        my $ST_file = sprintf{"%s",$Fld[1]};
                }
        };
close (LIST);
print "$ST_file\n";

# 6  
Old 05-12-2009
Your code has numerous problems. Maybe if you describe what you want to do it will be easier to help you than to try and guess by looking at your code.

You want to find all the files that match <*$tester*st*> (but where is $tester defined in your script?). Then what do you want to do? Print just the newest file or just the oldest file or what?
# 7  
Old 05-12-2009
Hi KevinADC,

What i am trying to do here is to simply perform the following unix command.
To list those files which matches the terms *$tester*st* and grab the latest file and assign it to a variable name ST_file.
Can you help ?

Code:
set ST_file = `ls -rt *$tester*st*|tail -1`

Re-writing the code

Code:
#!/usr/local/bin/perl
#use strict;
use warnings;
use File::stat;

$[ = 1;
my $tester = "HP100";
my $TEMP = "/mydir/scripts";
my @file_match = (<*$tester*st*>);
for ( $count = 1 ; $count <= $#file_match ; $count++ ) {
        open (FILE_MATCHED,"< $file_match[$count]");
        open (LIST,">> $TEMP/list");
        print LIST "$file_match[$count]\n";
        my @STAT = stat(FILE_MATCHED);
        push (my @time_stamp , $STAT[10]);
        print LIST "$file_match[$count] $STAT[10]\n";
        close (LIST);
        close (FILE_MATCHED);
   
}
my @sorted = sort { $a <=> $b } my @time_stamp;
open (LIST, "< $TEMP/list");
        while ( $line=<LIST> ) {
                my @Fld = split(' ', $line);
                print "$#sorted\n";
                if ( $Fld[2] == $sorted[$#sorted] ) {
                        my $ST_file = sprintf{"%s",$Fld[1]};
                }
        };
close (LIST);
print "$ST_file\n";


Last edited by Raynon; 05-13-2009 at 06:29 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Assigning bc output to a variable

I'm converting decimal to integer with bc, and I'd like to assign the integer output from bc to a variable 'val'. E.g. In the code below: If b is 5000.000, lines 6 and 8 will output: 5000 (5000.000+0.5)/1 | bc I'd like val to take the value 5000 though, rather than 5000.000 Does someone... (3 Replies)
Discussion started by: pina
3 Replies

2. Shell Programming and Scripting

Oneliner ---split string to character by piping shell output to perl

Hello, I was trying to split a string to characters by perl oneliner. echo "The quick brown fox jumps over the lazy dog" | perl -e 'split // ' But did not work as with bash script pipe: echo "The quick brown fox jumps over the lazy dog" | fold -w1 | sort | uniq -ic 8 1 T 1... (6 Replies)
Discussion started by: yifangt
6 Replies

3. Shell Programming and Scripting

Assigning output from awk to variable

I have a script whose contents are as below result= awk 's=100 END {print s }' echo "The result is" $result The desired output is The result is 100 My script is running without exiting and i am also not getting the desired output. Please help (5 Replies)
Discussion started by: bk_12345
5 Replies

4. Shell Programming and Scripting

piping output from PHP file into variable

Hi. I have a script like so: #!/bin/bash download='php /var/www/last.php' echo $download if $downloadHow do I pipe the output of the php file into a variable, as when i run the if statement, it just echos the file output to the screen and does not actually consider the output (it will be... (2 Replies)
Discussion started by: daydreamer
2 Replies

5. Shell Programming and Scripting

assigning SED output to a variable = trouble!

i'm on a Mac running BSD unix. i have a script in which i ask the user to input the name of a mounted volume. i then call SED to substitute backslashes and spaces in place of the spaces. that looks like this: echo "Enter the name of the volume" read Volume echo "You've chosen \"$Volume\""... (7 Replies)
Discussion started by: hungryd
7 Replies

6. Shell Programming and Scripting

Assigning output of a command to variable

When I run time -p <command>, it outputs: real X.XX user X.XX sys X.XXwhere X.XX is seconds. How I can take just that first number output, the seconds of real time, and assign that to a variable? (9 Replies)
Discussion started by: jeriryan87
9 Replies

7. Shell Programming and Scripting

Assigning output to a variable

I am new to unix shell scripting. I was trying to convert each lines in a file to upper case. I know how to convert the whole file. But here i have to do line by line. I am getting it in the below mentioned script #!/bin/bash #converting lower to upper in a file #tr "" "" <file1... (3 Replies)
Discussion started by: jpmena
3 Replies

8. Shell Programming and Scripting

Assigning output of command to a variable in shell

hi, I want to assign find command result into some temporary variable: jarPath= find /opt/lotus/notes/ -name $jarFile cho "the jar path $jarPath" where jarPath is temporary variable. Can anybody help on this. Thanks in advance ----Sankar (6 Replies)
Discussion started by: sankar reddy
6 Replies

9. Shell Programming and Scripting

assigning nawk output to shell variable

Hello friends, I doing the follwing script , but found problem to store it to a shell variable. #! /bin/sh for temp in `find ./dat/vector/ -name '*.file'` do echo $temp nawk -v temp=$temp 'BEGIN{ split(temp, a,"\/"); print a}' done output: ./dat/vector/drf_all_002.file... (6 Replies)
Discussion started by: user_prady
6 Replies

10. Shell Programming and Scripting

Assigning output of command to a variable

Hi, I'm trying to assign the output of a command to a variable and then concat it with another string, however, it keeps overwriting the original string instead of adding on to the end of the string. Contents of test.txt --> This is a test var1="`head -n 1 test.txt`" echo $var1 (This is a... (5 Replies)
Discussion started by: oma04
5 Replies
Login or Register to Ask a Question