Bashでjsonファイルを読み取ってコマンドを実行する

Bashでjsonファイルを読み取ってコマンドを実行する

ブロックしたいりんごどの住所ですか?ダウンロード値が「20480」を超えています:
jsonファイル:

    {
  "client_length": 3,
  "clients": {
    "ac:07:5f:77:40:e9": {
      "id": 1,
      "ip": "192.168.5.40",
      "mac": "ac:07:5f:85:40:e9",
      "added": 1576258952,
      "active": 1576264642,
      "duration": 5711,
      "token": "4d8fd3ce",
      "state": "Authenticated",
      "downloaded": 45059,
      "avg_down_speed": 63.12,
      "uploaded": 2976,
      "avg_up_speed": 4.17
    },
    "ac:e0:10:55:2d:78": {
      "id": 2,
      "ip": "192.168.5.132",
      "mac": "ac:e0:10:12:2d:75",
      "added": 1576258985,
      "active": 1576264663,
      "duration": 5678,
      "token": "35dfa494",
      "state": "Authenticated",
      "downloaded": 18663,
      "avg_down_speed": 26.3,
      "uploaded": 4986,
      "avg_up_speed": 7.03
    },
    "58:48:44:db:ba:ba": {
      "id": 3,
      "ip": "192.168.5.93",
      "mac": "58:48:22:db:ba:be",
      "added": 1576258973,
      "active": 1576264662,
      "duration": 5690,
      "token": "139fede2",
      "state": "Authenticated",
      "downloaded": 187876,
      "avg_down_speed": 264.15,
      "uploaded": 7910,
      "avg_up_speed": 11.12
    }
  }
}

さらに、これは結果であり、ndsctl json常に変わることがあります。 ndsctl は nodogsplash パッケージの一部です。 OpenWrt(BusyBox v1.28.4)にこのパッケージをインストールしました。

私の目標:
上記のjsonは私にいくつかの情報を提供します。このファイルによると、ダウンロード値が「20480」を超えるのでブロックしたいと ac:07:5f:77:40:e9思います。58:48:44:db:ba:ba

これを行うにはbashスクリプトが必要です。

ブロックするコマンドりんご住所:
ndsctl block ac:07:5f:77:40:e9
ndsctl block 58:48:44:db:ba:ba

私はいくつかのことをしました:

root@OpenWrt:~# cat test.json | grep "mac\|downloaded"
"mac":"ac:07:5f:85:40:e9",
"downloaded":45059,
"mac":"ac:e0:10:55:2d:78",
"downloaded":18663,
"mac":"58:48:44:db:ba:ba",
"downloaded":187876,

どんなアイデアがありますか?

ベストアンサー1

ほとんどのUnicesには「ready-to-use」というコマンドラインJSONパーサーがありますjq(パッケージシステムからインストールする必要があるかもしれません)。

これにより、20,480回以上ダウンロードされたエントリのMACアドレスを簡単に確認できます。

ndsctl blockこれを取得したら、次を使用して1つずつ渡すことができますxargs

jq -r '.clients[] | select(.downloaded > 20480).mac' file.json |
xargs -n 1 ndsctl block

これはJSONドキュメントですfile.json

特定のJSON文書に対して2つのコマンドが実行されます。

ndsctl block ac:07:5f:85:40:e9
ndsctl block 58:48:22:db:ba:be

おすすめ記事