Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

How do you write

    awk '{print $3 ":" $1 " " $2}'
in Perl?


  perl -aE 'say "$F[2]:$F[0] $F[1]"'


That's indeed concise, but it doesn't work. I think you need -naE


-a implies -n since v5.19.3.


One way would be:

   perl -nae'printf("%s:%s %s\n",$F[2],$F[0],$F[1])'


I would not call that "as concise as awk"


Lisp:

  $ txr -e '(awk ((prn `@[f 2]:@[f 0] @[f 1]`)))'
  1 2 3
  3:1 2
How about input from a string stream? At the REPL:

  1> (with-in-string-stream (*stdin* "1 2 3")
       (awk ((prn `@[f 2]:@[f 0] @[f 1]`))))
  3:1 2
  nil
It pays not to have awk be some some canned global behavior enabled by a command line option.


Another way, without using a quasiliteral: just set the output field separator (ofs) to empty string, and prn:

  txr -e '(awk (:set ofs "") ((prn [f 2] ":" [f 0] " " [f 1])))'
This is like:

  awk -v OFS= '{print $3, ":", $1, " ", $2}'




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: