In my experience with this problem, it appears that buffering issues can affect both the read and write sides of each command. In my case, I had a command like the following:
$ parallel ... | ggrep ...
This worked fine, printing output as it was produced by
parallel. When I tried to process further with
$ parallel ... | ggrep ... | awk ...
I didn't see output until
parallel was done. I naturally thought the issue was with
awk, hence finding this post, so I tried this:
$ parallel ... | ggrep ... | stdbuf -o0 awk ...
But what actually fixed it was this:
$ parallel ... | stdbuf -o0 ggrep ... | awk ...
So it appears that
ggrep can tell when it's printing vs. hooked up to another command, and buffers its output in the latter case. (Incidentally,
ggrep actually has a
--line-buffered flag which fixes my problem as well.)