News for hackers. Stuff that matters.
Re:Pipes and Filters by djur on Tuesday September 16, 2014 @09:10PM (#8327967)
I've never agreed with the UUOC concept when applied to pipelines. Using cat in a pipeline for a single file makes the flow clearly unidirectional, prevents certain types of errors like switching > and <, allows the command to be easily modified to handle multiple files or a glob, and frankly just seems easier to read.

Considering the tiny overhead of an additional cat process, UUOC these days feels like nitpicking.

Re:Pipes and Filters by unhammer on Wednesday September 17, 2014 @04:13AM (#8329018)
Also, the cat makes for faster testing. I tend to start out with e.g.

    head bigfile.1.txt | grep | awk | stuff
and refine things, and when output looks right, it's a simple "Ctrl+A Meta+D cat RET" to run it on the full output. Or vice versa if I suddenly want to go back to testing part of bigfile (or exchange the cat for "grep something").

If I want to change that to "< bigfile.1.txt", I have to "Ctrl+A Meta+D < Meta+F Meta+F Meta+F Ctrl+D Ctrl+D" – the extra keypresses are to delete the first "|" symbol. And if I suddenly want to change it back to head or grep, I have to reinsert the | (also I often by habit do Meta+D instead of Ctrl+D at the beginning of the line, which doesn't work as intended if the first token is "<" instead of "cat").

Those useless cats are quite handy when doing a lot of shell work.

Re:Pipes and Filters by JetSpiegel on Wednesday September 17, 2014 @05:11AM (#8329191)
You can use <bigfile.txt head | grep | awk
Re:Pipes and Filters by unhammer on Wednesday September 17, 2014 @09:39AM (#8329858)
So if I want to change that to the whole file, I "just" have to Ctrl+A Meta+F Meta+F Meta+D Ctrl+D Ctrl+D RET. That's not really an improvement – especially since it depends on how many dots or similar are in the filename.

Also, that's a Useless Use of head, since grep has the option "-m10"

Re:Pipes and Filters by JetSpiegel on Wednesday September 17, 2014 @02:13PM (#8331450)
grep -m "Stop reading a file after NUM matching lines", while head -10 takes the first 10 lines and searches on them. Different things.
Re:Pipes and Filters by unhammer on Wednesday September 17, 2014 @04:34PM (#8332224)
doh! you're right, I wasn't thinking :-)
Re:Pipes and Filters by rdc12 on Wednesday September 17, 2014 @04:16AM (#8329027)
But then the article has this

"(If we move grep to run immediately after cat, and before putting data into Redis, this operation runs more than 1,200 times faster.)"

Which does indicate that in some cases the UUOC is justified (thou in this case the cat remains)