I am confused. What's wrong with `wc -l < file | ... | ...`?
I know `< file wc -l | ... | ...` is identical because the redirection is done before the command is executed, but what does putting it in front help with?
Because I feel the other answers, though correct, are entirely missing out on clarity:
The first iteration looks like this:
<file head -n10 | grep foo | tr baz qux
The second iteration looks like this:
<file gzcat | head -n10 | grep foo | tr baz qux
It makes the change much easier, since the first thing written is the first thing that happens. In `gzcat < file`, the logical first step - reading and streaming file - is now the physical second step. Like a German sentence, whenever you want to prepend the file, you have to maintain an item in second position.
However using the input redirect is fine, especially if you format it that way (which is exactly the same thing):
Then, adding another step is as natural as with cat: