8 comments

[ 2.9 ms ] story [ 39.2 ms ] thread
It amazes me at work how many people just violate UUOC/UUOG

ie..

  cat file | grep bar | awk '{ print $1 }' | sort | uniq
which can simply be

  awk '/bar/ { print $1 | "sort -u"}' file
Its a balance of clarity, vs efficiency. Also, I chose uniq over sort -u, for the -c option.

That being said, point well made.

I've done this for single-use pipelines when built up because the nature of the data is unfamiliar. It usually starts with

   cat file | less
and then

   cat file | grep bar | less
and then

   cat file | grep bar | awk '{ print $1 }' | less
and so on.

But if it's going to be used more than once then it does seem odd to have the unnecessary commands. Maybe "advanced" awk (beyond print $1) is unknown to people?

if you are only doing 'print $1' you should be using cut. but whatever.
Well, I often do:

    cat some.log | awk '/regexp/ { print $2}' | sort| uniq
Then tweak that line to get what I want, then change it to:

    zcat some.log*| ...
I believe the word you want is 'Glean'