ls | grep '.csv$' | xargs cat | grep 'cake' | cut -d, -f2,3 > cakes.csv
That's quite a few antipatterns in one go. Unless you have a bajillion files the `xargs` is unnecessary, the `cat` and `ls` are unnecessary (and `ls` in shell scripts is a whole class of antipatterns by itself). You might want to use something like this instead:

  grep cake *.csv | cut -d, -f2,3 > cakes.csv

I certainly agree with your points, though the original task is a textbook example of where awk shines.

    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 is one of those underrated tools I always wanted to learn.

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.

I wrote a book on GNU awk one-liners with hundreds of examples and exercises [0]. Free to read online.

For a quick introduction, see [1] [2]

[0] https://github.com/learnbyexample/learn_gnuawk

[1] https://backreference.org/2010/02/10/idiomatic-awk/

[2] https://earthly.dev/blog/awk-examples/