LoginSignup
2
9

More than 5 years have passed since last update.

シェルスクリプトで進捗表示

Last updated at Posted at 2017-04-25

進捗を表示するスクリプトを作ってみました。
読み込んだ行の位置をパーセントで表示して終了するだけです。

# progresspar
# Example: ./progresspar file.txt
#!/bin/bash

ROW=$(awk 'END{print NR}' $1)
awk -v "row=$ROW" '{par=(NR/row)*100}{printf "%d%\r",par}END{printf "%d% Done\n",par}' $1

実行例

$ progresspar file.txt
 100% Done

以下は、ファイルサイズで計算する方法です。

#!/bin/bash

SIZE=`ls -l $1 | awk '{print $5}'`
od -An -tx1 $1 | awk -v "size=$SIZE" '{gsub(/ /,"");len=len+length($0)}{par=((len/size)*100)/2}{printf "%d%\r",par}END{printf "Done\n"}'

実行例

$ progresspar file.txt
 Done

GBサイズの膨大なログファイル整形処理の進捗を表示したいのですが、pvコマンドを導入できないので awkによる方法を模索している次第です。
とりあえず処理が進行していることが判れば良いので当面は以下ようにteeとawkとの応用で妥協することにします。

catでの実行テスト

$ cat input.log | tee output.log | awk '{printf "%dROWS Processed.\r",NR} END {printf "\nDone\n"}'
2
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
9