#jqコマンドは?
json形式のデータをパースしてくれるコマンドです。
インストールは、
brew install jq
でできます。
#利用するデータは?
今回は、speedtestの結果を以下のコマンドでjsonで出力して、それをパースしてダウンロードとアップロードだけを取得してみたいと思います。
まず、speedtestで出力結果をjson形式で書き出してresult.jsonに保存するために以下のコマンドを実施します。
なお、speedtestはOoklaの公式で提供されているものを用います。
それのインストール方法は、Ooklaの公式サイトで公開されています。
入力するコマンド
speedtest --format=json >> result.json
ファイル名を指定して出力する方法もありそうですが、私の力では見つからなかったため、とりあえずリダイレクションで、terminalの出力結果をファイルに出力しましした。
さて、ここからが本題です。
まずは、出力されたresult.jsonの中身を見てみましょう。
{"type":"result","timestamp":"2020-03-08T02:36:24Z","ping":{"jitter":3.3050000000000002,"latency":4.7750000000000004},"download":{"bandwidth":976859,"bytes":13739838,"elapsed":15015},"upload":{"bandwidth":903839,"bytes":4670503,"elapsed":5174},"packetLoss":0,"isp":"Asahi Net","interface":{"internalIp":"10.0.0.15","name":"en0","macAddr":"F8:FF:C2:69:EA:AA","isVpn":false,"externalIp":"14.3.19.11"},"server":{"id":14623,"name":"IPA CyberLab","location":"Bunkyo","country":"Japan","host":"speed.coe.ad.jp","port":8080,"ip":"103.95.184.74"},"result":{"id":"b3e495d4-30b6-4472-9fd2-69493a6c2b0f","url":"https://www.speedtest.net/result/c/b3e495d4-30b6-4472-9fd2-69493a6c2b0f"}}
このままだと、何が書いてあるのか理解するのが難しいです。
それでは、catコマンドとjqコマンドを利用して、jsonを見やすい形に整形して、見てみましょう。
{
"type": "result",
"timestamp": "2020-03-08T02:36:24Z",
"ping": {
"jitter": 3.305,
"latency": 4.775
},
"download": {
"bandwidth": 976859,
"bytes": 13739838,
"elapsed": 15015
},
"upload": {
"bandwidth": 903839,
"bytes": 4670503,
"elapsed": 5174
},
"packetLoss": 0,
"isp": "Asahi Net",
"interface": {
"internalIp": "10.0.0.15",
"name": "en0",
"macAddr": "******",
"isVpn": false,
"externalIp": "14.3.19.11"
},
"server": {
"id": 14623,
"name": "IPA CyberLab",
"location": "Bunkyo",
"country": "Japan",
"host": "speed.coe.ad.jp",
"port": 8080,
"ip": "103.95.184.74"
},
"result": {
"id": "b3e495d4-30b6-4472-9fd2-69493a6c2b0f",
"url": "https://www.speedtest.net/result/c/b3e495d4-30b6-4472-9fd2-69493a6c2b0f"
}
}
非常に見やすくなりましたね。
#jqコマンドで特定要素を取り出す
それでは、次にjqコマンドを利用して特定の要素だけを取り出してみましょう。
まずは、ダウンロードの速度を取り出してみたいと思います。
cat result.json | jq ".download.bandwidth"
と入力すると、
976859
と表示されました。
アップロードの速度だけを取り出すには、以下のコマンドを実行します。
cat result.json | jq ".upload.bandwidth"
すると、
903839
と表示されました。
これはあくまでも、バイト数なので、これをよく利用する「Mbps」に変換するには、
976859*8/1024/1024
または、
976859*8/1000/1000
としてください。
2進数で考えるのか、10進数で考えるのか、規格が微妙に異なるようです。
正式な規格としては、10進数で考えるのが正しいので、1000で割るのが正しいです。
ただ、業界としてはデファクトスタンダードとして2進数で考えて1024で割るのも、間違ってはいないようです。
コメントしてくださった方、ありがとうございます。
以上、おわおわり。