シェルでコマンドをパイプをつなげている時、
どれくらいの速度でパイプをデータが通過しているのか知りたい事がある。
pv コマンドを使うと分かる。
pipe viewer の略で pv らしい。
使用例
$ gzip -dc < something.gz | python analysis.py > result.txt
例として ↑ のように gzip を解凍してパイプを通して Python のスクリプトに渡し、
結果は result.txt に出力しているとする。
このとき間に pv をパイプして通すと進捗バーが表示される。
$ gzip -dc < something.gz | pv | python analysis.py > result.txt
81MiB 0:00:17 [ 13MiB/s] [ <=> ]
13 MiB/s の速度が出ていて、それまで計 81MiB のデータが pv を経由したとわかる。
進捗バーは /dev/tty に直接出してくれているようなので
標準出力や標準エラーをリダイレクトしても特に差し障りない。
使用例 2
pv は進捗バーを出す他は、完全に内容をそのまま通過させるので cat の代わりに使うこともできる。
たとえば、次のようなコマンドだと、 a.txt から から b.txt に進捗を表示しながらコピーする。
$ pv a.txt > b.txt
1.92GiB 0:00:32 [60.8MiB/s] [=======================================================================>] 100%
他の使用例
man
を読むと、全体のサイズを指定する -s
オプションを始め、
フォーマットのオプションやモードのオプションが多岐に渡る。
インストール方法
OS X
$ brew install pv
Debian/Ubuntu
$ sudo apt-get install pv
RHEL/CentOS
$ sudo yum install pv