いくつかの大規模なデータセットを繰り返し、いくつかの長いタスクを実行するスクリプトがあります。その後、sort | uniq -c
出力が必要です。それで、それが生きていることを知らせるために、N項目ごとにstderrにドットを印刷します(非常に原始的な擬似進行状況バー)。したがって、次のように見えます。
for i in {1..100}; do
[[ $(( (i+=1) % 10)) -eq 0 ]] && echo -n "." >&2
shuf -i 1-10 -n1
sleep 0.1
done | sort | uniq -c
そして出力:
.......... 9 1
10 10
8 2
14 3
13 4
9 5
11 6
8 7
8 8
10 9
「進行状況バー」は出力を少し混乱させます。だから気になります。
- フラッシュする前に、そのstderrにnwelineを追加する簡単な方法はありますか? (たぶん
echo >&2
それが私に必要なものかもしれません) - それとも削除しますか?
もちろん、実際にはWOWに多くの項目があることを知りません(少なくとも基本的には提供されていません)。それで、これがストリームリダイレクトを介して達成できるかどうか疑問に思います。
答え1
ループを中かっこ(または括弧)で囲み、その中に追加のエコーを入れます。
{ for i in {1..100}; do
[[ $(( (i+=1) % 10)) -eq 0 ]] && echo -n "." >&2
shuf -i 1-10 -n1
sleep 0.1
done; echo >&2; } | sort | uniq -c
中括弧グループ全体にリダイレクトされたら、続行するsort
には、ファイルの終わりを確認する前に、内部のすべてのエントリが終了するのを待つ必要があります。これにより、sort
およびの出力前に改行文字が印刷されますuniq
。