awk 'BEGIN {FS=","} /cake/ {print $2, $3}' *.csv > cakes.csv
Unsurprisingly I disagree with the post's description of awk being an "advanced command". awk 'BEGIN {FS=","} /cake/ {print $2, $3}' *.csv > cakes.csv
Unsurprisingly I disagree with the post's description of awk being an "advanced command".I guess there's no categorization of "advanced" vs "beginner" that will satisfy every audience but I consider awk an advanced tool. About 20 years ago, I wrote some AWK tips and cheatsheet back on USENET and today I would have to refer to that post to write basic awk commands.
The thing about awk is that it's a compact programming language with variables and conditionals and that's a step-change in complexity for many users.
I think it can be pretty advanced, for me awk is one of those tools where I still feel like I need to write a paragraph of comments to explain 1 line of code.
For example: https://github.com/nickjj/invoice/blob/75660dce5a29ceb4e47a6...
Keep in mind I don't really "know" awk. I cobbled that together from a few examples. It will convert times formatted like "2h 30m", "150m" or "2:30" into 2.50. There's a bunch of examples in the test file.
NOTE: I wrote that script 2.5 years ago and I know there's questionable patterns in other areas of the script that's not highlighted like using a bunch of separate echo calls instead of a heredoc.
Shell scripting is really fun and efficient. I use it all the time for a variety of things.
awk -F, '/cake/ {print $2, $3}' *.csv > cakes.csv
does the same thing: -F sets the field separator.I still remember when I started working as a sysadmin at 19, the greybeard UNIX guy taught me how to vim, and he told me awk was as important as knowing vim, pointing to some huge AWK manual he had on the shelf, one of those with the animal in the cover.
This was 15 years ago, I know vim, but awk still eludes me.
For a quick introduction, see [1] [2]
[0] https://github.com/learnbyexample/learn_gnuawk
- I understood where a lot of the stuff in Perl (and, to a lesser degree, Ruby) came from, especially Perl's implicit loop mode.
- I never wanted to write a program in awk again. Ruby (or whatever your preferred scripting language is) is better every time: awk is not much less work and Ruby generalizes more.
Awk for scripting is a bit like shell for scripting. It's easy to extend a script into something which is uncomfortably expensive to rewrite when you inevitably want to do something it's not well suited to. Awk still has uses, but it's in things like portable shell scripts which need more text manipulation power.
But awk is usually not a good choice for processing CSV files.
Your program will fail if any of the fields include embedded commas (which is often the case).