Mailinglist Archive: opensuse (3135 mails)

< Previous Next >
Re: [opensuse] shell script newbie: how to display progress of a pipe?
  • From: Randall R Schulz <rschulz@xxxxxxxxx>
  • Date: Mon, 5 Mar 2007 18:26:58 -0800
  • Message-id: <200703051826.58501.rschulz@xxxxxxxxx>
Weiwu,

On Monday 05 March 2007 17:50, Zhang Weiwu wrote:
> Hello. I have a shell script that process about 35MB data: command1
> produce 35MB data and sed do some work to the data, send to command2
> who receive these data:
>
> $ command1 | sed -e 'xxxx' | command 2
>
> The problem being I don't know the progress. Unfortunately both
> command1 and command2 do not have any output of progress, maybe 'sed'
> has a way of displaying progress but I could not find. The commands
> run very long time (1 day) so I need a way to know how much data has
> been processed (1MB? 10MB?).

Sed can write to outputs other than the standard out. It's a funky 
language, but you can make sed jump through some hoops if you reall 
need it to.

However, you might want to consider an alternate means of achieving the 
overall goal (whatever the sed filter did plus the progress reporting) 
by recasting the task in awk or Perl.


> I guess maybe there have already been such a useful tool that simply
> read data from stdin, write to stdout (like cat) but meanwhile
> produce a message on STDERR saying "xxx bytes has been read". But I
> couldn't find it. I also think it would be nice if cat(1) or tr(1)
> have a 'verbose' option that report progress to STDERR, but cat(1)
> don't seem to have such an option.

If you configure Guru's RPM repository as a YaST repository and search 
(in Software Management) on the term "progress", you'll find some tools 
that may serve your needs:

- barcat - 'cat' Tool with an ASCII Progress Bar

barcat is just like "cat", but displays an ASCII progress bar. Its goal 
is to work on any Unix-like platform and to be directly usable in 
installation scripts without needing compilation, so it is a pure shell 
script.


- clpbar - Command Line Progress Bar

Command Line Progress Bar is a simple command line tool to display 
information about a data transfer stream. It will display the number of 
bytes transfered, the speed of the transfer, and if the size of the 
data stream is known it will display the ETA.


- pipemeter - Provides Throughput and sometimes Progress on Shell Pipes

This program can be used in a shell pipe to display speed and progress 
(if size of stream is available).


- progress - File I/O Progress Monitor Utility

The progress utility allows progress to be monitored of file I/O. It 
includes support for gzip-compressed files, so "progress -z -f 
file.tar.gz tar xf -" would show progress of extracting 
file.tar.gz.It's a port of the original NetBSD progress utility to 
Linux and Solaris.

- pv - PipeViewer - Monitor the Progress of Data through Pipes

PV ("Pipe Viewer") is a tool for monitoring the progress of data through 
a pipeline. It can be inserted into any normal pipeline between two 
processes to give a visual indication of how quickly data is passing 
through, how long it has taken, how near to completion it is, and an 
estimate of how long it will be until completion.


> What would you suggest for my case to report progress?


Randall Schulz
-- 
To unsubscribe, e-mail: opensuse+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse+help@xxxxxxxxxxxx

< Previous Next >
Follow Ups
References