Nothing prevents us from chaining pipes consecutively.
We can for example send the output of wc directly to sort,
and then the resulting output to head.
This removes the need for any intermediate files.
We’ll start by using a pipe to send the output of wc to sort:
$ wc -l *.pdb | sort -n
   9 methane.pdb
  12 ethane.pdb
  15 propane.pdb
  20 cubane.pdb
  21 pentane.pdb
  30 octane.pdb
 107 total
We can then send that output through another pipe, to head, so that the full pipeline becomes:
$ wc -l *.pdb | sort -n | head -n 1
   9  methane.pdb
This is exactly like a mathematician nesting functions like log(3x)
and saying ’the log of three times x’. In our case,
the calculation is ‘head of sort of line count of *.pdb’.
The redirection and pipes used in the last few commands are illustrated below:
In our current directory, we want to find the 3 files which have the least number of lines. Which command listed below would work?
wc -l * > sort -n > head -n 3wc -l * | sort -n | head -n 1-3wc -l * | head -n 3 | sort -nwc -l * | sort -n | head -n 3