速度テスト出力から複数の文字列のgrep

速度テスト出力から複数の文字列のgrep

私はそれを使用しています速度テスト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をマークダウン形式のテーブルに再フォーマットします。UploadPing

結果は次のとおりです。

|        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

関連情報