output.log
次の内容を含むファイルがあります。
Thread started
Thread finished
Thread started
Thread finished
Thread started
Thread started
以下を使用して出力を監視します。
tail -f output.log
現在実行中のスレッド数を記録するコマンドを作成したいと思います。上記の場合、出力は次のようになります。
2 threads are running
grepを使用して何らかの方法で文字列インスタンスを記録する必要がありますか?
答え1
計算に使用できますawk
。しかし、より複雑なものがない場合は、次のものを使用できます。
tail -f output.log | awk '/Thread started/{n++}/Thread finished/{n--} END { printf ("%d Threads are running\n", n)}' output.log
より良い方法は、watch
次のように使用することです。
watch -n.2 -x awk '/Thread started/{n++}/Thread finished/{n--} END { printf ("%d Threads are running\n", n)}' output.log
画面上部に表示されるすべての項目が-n.2
更新されます。0.2s
答え2
次のbash
スクリプトを試すことができます。
#!/bin/bash
start_count=$(grep -c "started" /path/to/output.log)
finish_count=$(grep -c "finished" /path/to/output.log)
echo "$((start_count - finish_count)) threads are running"
これは、印刷可能範囲外の以前に実行されていたスレッドをすべて考慮しますtail -f
。ここでは、ファイルに「開始済み」と「完了済み」が表示される回数を計算し、単にこの値を減算して結果を取得します。tail -30 /path/to/output.log
ファイル全体の代わりに読み取る行の範囲(たとえば)を選択し、その行に基づいて結果を見つけたい場合。
答え3
このスクリプトを実行してみてください。
a=$(grep started output.log | wc -l)
b=$(grep finished output.log | wc -l)
echo Total Running threads: "$[$a-$b]"
Bashスクリプトを生成し、上記の行を貼り付けます。スレッドが実行されます。