Tracking progress for a long running pipe command


I was trying to count the number of occurrences of a word in a file on Ubuntu. This typically isn't a big deal:

grep TERM myfile.txt | wc -l

However this file is nearly 200gb and I'd like some indication of how far along I am.

pv to the rescue

I came across this post on StackOverflow: Tracking a program's progress reading through a file?

pv (Pipe Viewer) is "a terminal-based tool for monitoring the progress of data through a pipeline." Looks like exactly what I needed:

SIZE=$(ls -l myfile.txt | awk '{print $5}'); grep TERM myfile.txt | pv -s $SIZE | wc -l

SIZE in this case will be an upper bound, since pv will not receive that much data due to the grep command filtering the file.