Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

get value from a awk system command

by filipebean (Novice)
on Apr 10, 2013 at 13:53 UTC ( #1027971=perlquestion: print w/ replies, xml ) Need Help??
filipebean has asked for the wisdom of the Perl Monks concerning the following question:

Hi all,

I'm a bit lost in this topic, can someone advice please.

I want to read some lines from a file that have a specific value in field number 3:

my @rows = `cat file.csv | awk -F';' '{if ($3==1) print $0}'`; my $lines= join("\n",@rows ); printlog("string: $lines");

instead of having the lines filtered, $lines is empty. when I execute the command on solaris it work...

any idea??

thank you in advance.

Comment on get value from a awk system command
Download Code
Re: get value from a awk system command
by LanX (Canon) on Apr 10, 2013 at 13:57 UTC
    > any idea??

    Yes, use Perl! =)

    This language was primarily invented to get rid of sed and awk!

    have a look at a2p (Awk to Perl translator) to have a start.

    Cheers Rolf

    ( addicted to the Perl Programming Language)

Re: get value from a awk system command
by hdb (Prior) on Apr 10, 2013 at 14:34 UTC

    Here is the Perl code:

    open $fh, "<", "file.csv"; my $lines; while(<$fh>) { my @record = split /;/; # split on semicolon $lines .= $_ if $record[2] == 1; } close $fh; print("string: $lines");
Re: get value from a awk system command
by hdb (Prior) on Apr 10, 2013 at 14:45 UTC

    The Perl equivalent of the awk command itself is

    perl -a -F/;/ -ne "print if $F[2]==1" file.csv
Re: get value from a awk system command
by hippo (Curate) on Apr 10, 2013 at 15:23 UTC
    when I execute the command on solaris it work...

    You have not said under what conditions it fails - all we can assume is "not Solaris" which doesn't narrow it down much. However, here are a few observations.

    Your file is called file.csv but you are using a semicolon as the delimiter and not a comma as the filename suggests, so perhaps that is your error?

    The awk command includes some dollar symbols which are not escaped, so that will almost certainly give you grief. One of them (in $0) is unnecessary, so can be omitted. If we do that, remove the UUoC and perform the necessary escaping we arrive at

    my @rows = `awk -F';' '\$3==1' file.csv`;

    which seems to work fine assuming the semi-colon really is the delimiter.

    Notwithstanding all this, there's no benefit of shelling out to awk unless it's demonstrably faster than using perl which is doubtful for all but very large datasets.

      Hi,

      thank you for your help, I tried your sugestion but @rows still empty... :(

      the delimiter is ; and I've check that.

      Ive also tried the command perl:

      perl -a -F/;/ -ne  "print if $F[2]==1" file.csv

      and it also dont work.

      :(

        When you post a message like this, do NOT say "it doesn't work". Instead, show what you tried, what you got, and what you wanted. Use copy/paste rather than typing from memory.

        eg:

        I tried the code

        use warnings; use strict; print "$0";
        the results I got were just
        test.pl
        But I was hoping to get something more like "perl test.pl" printed out.

        Actually, it does work. Here's the source data in file.csv:

        a;b;1;foo j;k;2;dog m;n;3;cat y;z;1;bar

        And here's the script, which I have called at.pl:

        #!/usr/bin/perl -w use strict; use warnings; my @rows = `awk -F';' '\$3==1' file.csv`; my $lines= join('', @rows ); print "string: $lines"; exit;

        and here's the output from running ./at.pl:

        $ ./at.pl string: a;b;1;foo y;z;1;bar $

        awk is gawk 4.0.0, perl is 5.14.2. I still don't recommend doing it this way for reasons of efficiency and external dependency but it does give the right output.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1027971]
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2014-09-17 02:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (56 votes), past polls