OSXのスロットルパイプコマンド?


0

grep最大でX秒ごとに実行されるように出力を調整したい。具体的には、次のようなことをしたいです。

ping 8.8.8.8 | grep "No route to host" | throttle 3s | xargs -I % sh -c 'reset wifi'

1
いいえ、次の場合にWiFiをリセットします:XY問題を参照してください。
カミルマシオロウスキ

1
@KamilMaciorowski-いいえ、コマンドを調整する方法を知りたいです。私は実際の問題と解決策が何であるかを正確に知っており、この正確な質問に戻るために75ステップで問題をレイアウトすることは無意味であり、みんなの時間の無駄です。誰もが自分で質問することなく、自分の質問について無知だと思い込まないでください。それはただ失礼です。
ザイクルス

回答:


2

この質問に基づいて自分の質問に答えますが、OSXではわずかに変更されました:

epoch () { date -v+$* "+%s" }

interval () {
    INTERVAL="$*"
    WHEN_TO_RUN=0
    while read LINE; do
        if (( $(epoch 0S) >= $WHEN_TO_RUN )) then
            echo $LINE
            WHEN_TO_RUN="$(epoch $INTERVAL)"
        fi
    done
}

許可する ... | interval 3S


私には合理的に見えます。しかし、構文上の問題があるようです-算術評価(セミペア)の後にセミコロンはありません。また、LAST_RUN_ATは使用されていません。もちろん、ここでの基本的なタイミングはかなり粗く、粒度は秒単位です。しかし、パススルーの品質が目の前のタスクのニーズを満たす場合は、自分の答えを受け入れることができるかどうかを確認してください。:-)
sjnarv

@sjnarv-エポック時間をミリ秒単位で取得する方法を知っている場合は、より一般的にするために更新します
-zyklus

いいえ、macOSにとって簡単なソリューションはありません。公平のために、私はあまり見ていないので、これを決定的な情報として受け取らないでください。Linuxにとって非常に簡単なものdate +%s.%N- 何かを介してナノ秒を含む「エポック以降」の値を取得することは、macOSではサポートされていません(とにかく私が知る限り)。macOSで間隔をもう少し正確にする必要がある場合は、を使用するCを作成できますgettimeofday(2)
sjnarv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.