As posted here and here, pipeviewer is a tool that shows content progress based on it's size. As seen there, the proposal of their questions is to get a progress bar of a process running without data volume.
I was wondering if is it possible to show progress of a loop with pipeviewer, considering that I'm reading it from a file, and I know it's size.
I've trying something like
while IFS= read -r line;
do
<code>
done < file.txt | pv
And this definitelly doesn't work, since pv shows only an empty progress bar.
Any ideas?
Thank you in advance!
If you can, read the file with pv
instead of cat
, so that pv will automatically get the file size and format the progress bar appropriately.
For example:
pv very_big_file.txt
or, in your example:
pv file.txt | while IFS= read -r line;
do
<code>
done
If you cannot read the file with pv
, you can pass pv
the size of the file with -s size
.
That way, pv
will expect the flow to be that length, and format the progress bar proportionally to it.
You can get the size of a file with:
stat -c '%s' file
or
wc -c < file
For example:
command1 | command2 | ... | pv -s $(stat -c '%s' file) | commandX | ...
in your example:
cat file.txt | pv -s $(stat -c '%s' file.txt) | while IFS= read -r line;
do
<code>
done
As you see, it is redundant to use pv
just after cat, it should be substituted by a pv
reading the file.