My first guess is "named pipes". Read on mkfifo, then play around with this quick snippet and see if you can understand what I mean:
$ # run this on one terminal emulator
$ mkfifo myfifo
$ tail -f myfifo
$ # then run this into another one, put them side by side
$ for i in $(seq 1 10); do sleep 1s; echo "loopA: $i" > myfifo; done& for j in $(seq 100 110); do sleep 1s; echo "loopB: $j" > myfifo; done&
This launches two loops on the background (so they run kind-of concurrently for our purpose), they both write to a named fifo. Then we read from that fifo on the other terminal using tail -f (but it could very well be your third tool instead).