進捗を表示するスクリプトを作ってみました。
読み込んだ行の位置をパーセントで表示して終了するだけです。
# 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"}'