
私はそれを使用しています速度テストBASHスクリプトのCLIを実行し、1行だけを使用して出力を取得しようとしています(可能な場合)。
Speedtestの一般的な出力:
Speedtest by Ookla
Server: (censored)
ISP: (censored)
Latency: 93.85 ms (222.66 ms jitter)
Download: 85.75 Mbps (data used: 134.8 MB)
Upload: 5.68 Mbps (data used: 6.2 MB)
待ち時間、ダウンロード速度、アップロード速度、ジッタを取得したいです。
Most ideal format:
Download Speed: xx Mbps
Upload Speed: xx Mbps
Latency: xx ms
Jitter: xx ms
私の現在のテストコードは2つの無駄な文を使用しています。
dl_speed=`speedtest | grep "Download: " | head -2 | tail -1 | awk {'print$2'} | cut -f1 -d:`
ul_speed=`speedtest | grep "Upload: " | head -2 | tail -1 | awk {'print$2'} | cut -f1 -d:`
echo "Download Speed: $dl_speed Mbps"
echo "Upload Speed: $ul_speed Mbps"
答え1
GNU awkを使用してください。少なくともスペースと(
フィールド区切り文字を使用しました。これをspeedtest
コマンドに追加します。
| awk 'BEGIN{ FS=" +|\\(" };
/Download/{ dow=$3 " " $4 };
/Upload/ { upl=$3 " " $4 };
/Latency/ { lat=$3 " " $4 };
/jitter/ { jit=$6 " " $7 };
END{
print "Download Speed:", dow;
print "Upload Speed:", upl;
print "Latency:", lat;
print "Jitter:", jit
}'
標準出力に出力:
ダウンロード速度:85.75Mbps アップロード速度:5.68Mbps 遅延時間:93.85ms ジッタ:222.66ms
答え2
speedtest | tr -d '(:' | \
awk '/Download|Upload/ {print $1 " Speed: ",$2,$3}
/Latency/ {print $1":",$2,$3}
/jitter/ {print "Jitter:",$4,$5}'
与えられた
Latency: 93.85 ms
Jitter: 222.66 ms
Download Speed: 85.75 Mbps
Upload Speed: 5.68 Mbps
答え3
私がアクセスできるこのツール()のバージョンspeedtest-cli
(Ubuntuの場合2.1.2、macOS、OpenBSDの場合2.1.3)は、表示された正確な出力形式を提供しません。ただし、正しいコマンドラインオプションが提供されている場合は、CSVおよびJSON形式で出力を提供します。
これは、次のようにJSON形式の出力から必要なデータを簡単に取得できることを意味します。
speedtest-cli --json |
jq -r '[
["Download (Mbps):", .download/1e6],
["Upload (Mbps):", .upload/1e6],
["Latency (ms):", .server.latency]
] | map(@tsv)[]'
これは子オブジェクトのキー.download
の値と値を選択します.upload
。ダウンロードおよびアップロード速度の値はビット/秒単位であるため、適切に調整する必要があります。値はヘッダーと一緒にタブ区切りの形式で出力されます。.latency
.server
出力例:
Download (Mbps): 88.32191644148061
Upload (Mbps): 93.34628783248138
Latency (ms): 10.756
私が持っているこのツールのバリエーションには、どの出力モードでも出力「ジッタ」がないようです。
ちなみに、JSON全体の出力は次のようになります。
{
"download": 88321916.4414806,
"upload": 93346287.83248138,
"ping": 10.756,
"server": {
"url": "http://somehost.example.com:8080/speedtest/upload.php",
"lat": "XXX",
"lon": "YYY",
"name": "Thetown",
"country": "Thecountry",
"cc": "ZZ",
"sponsor": "Company",
"id": "XYZ",
"host": "somehost.example.com:8080",
"d": 156.5033515123062,
"latency": 10.756
},
"timestamp": "2021-12-04T20:12:20.816506Z",
"bytes_sent": 119447552,
"bytes_received": 110800036,
"share": null,
"client": {
"ip": "my-public-ip-number",
"lat": "XX",
"lon": "YY",
"isp": "provider",
"isprating": "3.7",
"rating": "0",
"ispdlavg": "0",
"ispulavg": "0",
"loggedin": "0",
"country": "ZZ"
}
}
speedtest-cli
以下を使用してCSV出力を解析することもできます。csvkit
ツール:
{ speedtest-cli --csv-header; speedtest-cli --csv; } |
csvcut -c Download,Upload,Ping | csvlook
まず、CSVヘッダーを出力しますspeedtest-cli
(理由が何であれ別々に実行する必要があります)。次に、速度テストを実行し、列(CSVで結果を取得するときに「遅延」列がないようです)をDownload
抽出し、結果のCSVをマークダウン形式のテーブルに再フォーマットします。Upload
Ping
結果は次のとおりです。
| Download | Upload | Ping |
| --------------- | --------------- | ------ |
| 88,649,466.475… | 93,164,137.292… | 10.193 |
レンダリングすると、次のようになります。
ダウンロード | アップロード | 平らな |
---|---|---|
88,649,466.475… | 93,164,137.292… | 10.193 |
最初の2列の数字はビット/秒単位です。
答え4
すべてのUnixシステムのすべてのシェルでawkを使用し、データ名を印刷する必要がある場合は、コードで一度だけ使用してください。これにより、追加のprt()
ステートメントを簡単に追加、変更、テスト、および/またはそれを実行したり、他の同様のコマンドを並べ替えることができます。コードをまったく変更せずにフォーマットされたデータ:
$ speedtest | awk '
{
gsub(/[:()]/,"")
tag2val[tolower($1)] = $2 " " $3
tag2val[tolower($6)] = $4 " " $5
}
END {
prt("Download Speed")
prt("Upload Speed")
prt("Latency")
prt("Jitter")
}
function prt(name, tag) {
tag = tolower(name)
sub(/ .*/,"",tag)
print name ":" OFS tag2val[tag]
}
'
Download Speed: 85.75 Mbps
Upload Speed: 5.68 Mbps
Latency: 93.85 ms
Jitter: 222.66 ms