`wc -l`をリアルタイムで更新するには?

`wc -l`をリアルタイムで更新するには?

<streaming ls> | wc -l正常に動作するコマンドがありますが、少し<streaming ls>時間がかかります。つまり、数分後に最終行数を取得できます。

wc -lリアルタイムでアップデート出力を取得する方法はありますか?

答え1

この目的には使用できませんが、wc -l他のツール(AWKなど)を使用して表示される行の累積数を生成できます。

<streaming ls> | awk '{ printf "%d\r", NR } END { print NR }'

これは、行が表示されるたびに表示される行数を更新し、プロセスの終わりに行の総数で終わります。

出力量の多いコマンドの場合は、各コマンドを印刷してオーバーヘッドを減らすことができます。Nライン:

… | awk 'NR % 10 == 0 { printf "%d\r", NR } END { print NR }'

(のためN= 10)または毎秒印刷します。

… | awk 'systime() > lasttime { lasttime = systime(); printf "%d\r", NR } END { print NR }'

(またはN条件を>= lasttime + n)秒に変更します。

答え2

これを使用してpv進行状況レポートを提供できます。

cmd | pv -lbtr | wc -l
  • -lラインベース(バイト数ではなくライン数を報告する)
  • -bバイト数を報告します。 (ただしここに行があります-l
  • -t所要時間を報告
  • -r現在の速度(1秒あたりの行数、-a平均速度を参照)を報告します。

ファイル名は複数行で構成されている可能性があるため、または同じオプションを使用してファイル名から改行をエスケープしない限り、出力からwc -lファイルls数を提供することは保証されません。-b-q\n?

答え3

まあ、私は似たようなものを使用しましたが、watch -n 1 your commandこれがあなたの場合にどのような用途に使用されるのかわかりません。私は専門家ではなく、私の心に最初に浮かぶものです。

https://man7.org/linux/man-pages/man1/watch.1.html

watch - 定期的にプログラムを実行し、出力を全画面表示します。

-n, --interval 秒は更新間隔を指定します。このコマンドは、小さい値が変換される0.1秒未満の間隔を許可しません。両方」。 'および'、'はすべてのロケールで動作します。 WATCH_INTERVAL環境は、デフォルト以外の間隔を継続的に設定するために使用できます(同じ規則と形式に応じて)。

関連情報