in reply to unhead and untail
The cutting up of input stream as you describe can be much done much easier with sed, for instance, instead of
doquery-students | sort | unhead '^D' | untail '^G'
Also, neither head nor tail modify files they operate on. I understand, you were probably solving a specific problem, but this script can be generalized even more.query-students | sort | sed '/^D/,/^G/p; d'