毎日実行しているスクリプトの統計を収集しようとしています。実際に睡眠に費やした時間がどれくらいになるのか知りたいです。すべての睡眠サイクルの合計を取得する方法はありますか?たとえば、
#some task
sleep 5
#some task
sleep 2
結果は7になってほしいです。スクリプトには、複数のループと条件を含む多くのファイルが含まれています。このソリューションを使用するには、スクリプトを実行して、実際に睡眠がどのように呼び出されているのか、何回の呼び出しを確認する必要があります。
答え1
速くて汚い答えはgrepとawkを使って追加することです。
grep -o 'sleep [0-9]\+' input.sh | awk '{ sum +=$2 } END { print sum }'
これはgrep
「input.sh」を検索することを意味します。各行には、-o
その行の一致する部分だけを印刷します()。一致は、sleep
文字列の後に0から9までの数字が1つ以上続く必要があります。これで印刷する内容ができました。
sleep 5
sleep 2
このリストをここに送信し、awk
行ごとに処理してから、2番目の列をすべて合計します。最後に合計を出力します。
注:これはやや脆弱なソリューションです。たとえば、コメント付きの行がある場合:
# we used to do sleep 1000 here by it was too slow
合計には引き続き含まれます。スクリプトについてもっと知ると、より強力なパイプラインを作成できます。たとえば、sleep
呼び出しが常に行の先頭にあることがわかっている場合は、grepをアンカーできます。
grep -o '^sleep [0-9]\+' | ...
そして、睡眠時間が多く含まれているスクリプトも疑わしいです。オートメーションを構成するより良い方法はほとんど常に存在し、スリープモードはほとんどテストにのみ役立ちます。