4 ms·
Skip learning of sed and awk and jump straight to perl instead. $ perl --help ... -F/pattern/ split() pattern for -a switch (//'s are optional) -
by shpeedy 7y ago
Skip learning of sed and awk and jump straight to perl instead.
$ perl --help
...
-F/pattern/ split() pattern for -a switch (//'s are optional)
-l[octal] enable line ending processing, specifies line terminator
-a autosplit mode with -n or -p (splits $_ into @F)
-n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also, like sed
-e program one line of program (several -e's allowed, omit programfile)
Example. List file name and size:
ls -l | perl -ae 'print "@F[8..$#F], $F[4]"'
- just_myles 7y agoBecause syntatically as a language/tool it is super easy to remember. Writing one liners with awk feels more intuitive to me. Awk example: ls -l | awk '{print $9, $5}' or ls -lh | awk '{print $9, $5}' Seems a whole lot simpler. To me. I find if you have to write exhaustive shell scripts then maybe you can look for something more verbose like Perl, I guess.
- shpeedy 7y agoYep, but you have bug in your awk one-liner.
- wahern 7y agoIf you mean the lack of quotations, then the behavior is well-defined and is presumably what was intended. Per POSIX, > The print statement shall write the value of each expression argument onto the indicated output stream separated by the current output field separator (see variable OFS above), and terminated by the output record separator (see variable ORS above). The default value for OFS is <space> and for ORS, <newline>.
- demiol 7y ago> If you mean the lack of quotations, No, lack of commas in output and broken filenames with spaces.
- just_myles 7y agoI see your point regarding spaces in names. Suppose I could use FILENAME. But I think my point was made.
- just_myles 7y agoIn my defense I did this fairly quickly (Which was the point.) and was not trying to illustrate proper syntax (I mean it does run and does produces an output.). ls -l | awk '{print $9 "\t" $5}' That is about as much as i'm willing to do for this.
- taxtropel 7y agoYeah, because in love to read line noise.
- wbazant 7y agoAlso, because there's a whole culture of one-liners in Perl, you can also conveniently import libraries and call them: Even though there's frequently value in adding whitespace to programs, many of them are just fine as one liners :) e.g. this gets the title of a webpage for you: ``` $ perl -Mojo -E 'say g("mojolicious.org")->dom->at("title")->text' ```
- mongol 7y agoI don't know much Perl but 10+ years ago I read "Minimal Perl". For these purposes, I think it can act as the go-to tool.