5 ms·
Could you give some examples of one-liners you feel might be more elegant in Awk than in Perl? It might be fun to get a thread going where people try to give cl
by omaranto 9y ago
Could you give some examples of one-liners you feel might be more elegant in Awk than in Perl? It might be fun to get a thread going where people try to give clean Perl versions.
- majewsky 9y agoBasically anything that uses $1, $2,... because you save a split(). awk '$4 ~ /T/ { print $1 }' perl -nE '@x = split /\s+/; say $x[0] if $x[3] =~ /T/;' ... stares at this and wonders ... reads `man perlrun` ... Oooh, there's a switch to auto-split-on-whitespace in Perl. perl -anE 'say $F[0] if $F[3] =~ /T/;' Sooo this doesn't quite answer your question anymore, but I'm going to leave this here since it's a nice instance of TIL.
- jwilk 9y agoYou can save one character: -a implicitly sets -n.
- mitchty 9y agoThe best part about using the @F array, is you get more than 10 things you can split and dereference. $0-9 only in awk. That and maybe because i'm an old perl die hard, its just easier to pipe to perl than remember how awk does its shenanigans.
- kazinator 9y agoAwk is not limited to $0 to $9; where did you get that??? Maybe you're confusing this with register substitutions in regex: \1 through \9. The nice thing about the @F array is that @F[0] doesn't represent the whole record. There is a class of Awk bugs whereby arithmetic is being done on the parameters using $N (where N is some calculated variable containing an integer). Everything is fine when N >= 1, but if there is a bug where N is accidentally zero, then $N refers to the whole record instead of throwing an out-of-bounds error. And things are accidentally zero quite easily in awk, e.g. awk '{print $X}' # X is undefined so serves as zero; this prints all lines
- mitchty 9y agoSolaris awk. :)
- kazinator 9y agoI see on my Solaris 10 VM that indeed the "broken old awk" doesn't work past $9. However, on the same OS, "nawk" does.
- mitchty 9y agoYep, there is also /usr/xpg4/bin/awk vs /usr/ucb/bin/awk etc... I've long since had to deal with Solaris but for about 10 years of Solaris I always treat awk with a lowest common denominator approach. Which means I tend to avoid it even to this day.
- kazinator 9y agoAwk one-liners don't depend on cryptic combinations of one-letter option flags to change the behavior of something in the language.
- kazinator 9y agotxr -e '(awk ([#/T/ [f 3]] (prn [f 0])))' -e is just "evaluate Lisp expression for side effects; don't print its value"
- omaranto 9y agoOh, that looks nice. I'm guessing this in TXR Lisp (http://www.nongnu.org/txr/ http://www.nongnu.org/txr/), and that TXR is your project.
- kazinator 9y ago> perl -anE 'say $F[0] if $F[3] =~ /T/;' ^ ^ Please tell me that isn't required. Fail!
- omaranto 9y agoDon't worry, it's not required.