PBeginner has asked for the wisdom of the Perl Monks concerning the following question:

Iam trying to change the awk command to perl on WINDOWS,but unable to get it.Help appreciated.Presently the below is in a shell script which i need in perl.

Iam searching for a value in a txt file and storing in a variable.the search returns multiple values.On these output values i perform awk.

value='"310","00753"' a=`grep $value out.txt| cut -f6 -d'"'` cat=`echo $a | awk '{out=$1;for (k=2;k<=NF;k++){out=sprintf("%s,%s",ou +t,$k);}print out}'`

out.txt is as:

"310","00753","2" "310","00753","2" "310","00753","2" "310","00753","2" "310","00753","2" "310","00753","5" "310","00753","5" "310","00753","2" "310","00753","5" "310","00753","5" "310","00753","5" "310","00753","5" "310","00753","5" "310","00753","5"

need help in converting the above code to perl on windows.

Replies are listed 'Best First'.
Re: Help in converting awk in perl
by Tux (Canon) on Oct 10, 2013 at 06:06 UTC

    Looking at the command line, it might be easier to not start with awk, but write perl from the start. This very much looks like a CSV data file, so you can use Text::CSV_XS and maybe this problem can be addressed using Spreadsheet::Read's xlsgrep and/or xlscat (both also grep CSV reliable)

    The perl distribution comes with a a2p utility to convert awk code to perl:

    $ echo '{out=$1;for (k=2;k<=NF;k++){out=sprintf("%s,%s",out,$k);}print + out}' | a2p | perltidy #!/pro/bin/perl eval 'exec /pro/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; # this emulates #! processing on NIH machines. # (remove #! line above if indigestible) eval '$' . $1 . '$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shi +ft; # process any FOO=bar switches $, = ' '; # set output field separator $\ = "\n"; # set output record separator while (<>) { chomp; # strip record separator @Fld = split (' ', $_, -1); $out = $Fld[(1) - 1]; for ($k = 2; $k <= ($#Fld + 1); $k++) { $out = sprintf ('%s,%s', $out, $Fld[$k]); } print $out; } $

    From there on, you can modify to your hearts desire and include all other parts of your command line


    Enjoy, Have FUN! H.Merijn
Re: Help in converting awk in perl
by NetWallah (Canon) on Oct 10, 2013 at 06:21 UTC
    This perl command does the equivalent of your code, on Linux.
    Adjust and escape quotes as needed, for windows:
    perl -ne 'push @x, m/(\d+)"$/ }{print join (",",@x),"\n"' out.txt

                 My goal ... to kill off the slow brain cells that are holding me back from synergizing my knowledge of vertically integrated mobile platforms in local cloud-based content management system datafication.

Re: Help in converting awk in perl
by DrHyde (Prior) on Oct 10, 2013 at 10:02 UTC
    Use a2p.

        Examples of that

        ...or simply read this very thread's earlier answers before posting...

        Cheers, Sören

        Créateur des bugs mobiles - let loose once, run everywhere.
        (hooked on the Perl Programming language)