grep 用于速度测试输出中的多个字符串

wiw*_*nut 1 text-processing macos

我在 BASH 脚本中使用speedtest CLI,并尝试在可能的情况下仅使用一行来获取输出。

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)   
Run Code Online (Sandbox Code Playgroud)

我想获取延迟、下载速度、上传速度和抖动。

Most ideal format: 
Download Speed: xx Mbps
Upload Speed: xx Mbps
Latency: xx ms
Jitter: xx ms
Run Code Online (Sandbox Code Playgroud)

我当前的测试代码使用了 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"
Run Code Online (Sandbox Code Playgroud)

Cyr*_*rus 6

使用 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
       }'
Run Code Online (Sandbox Code Playgroud)

输出到标准输出:

下载速度:85.75 Mbps
上传速度:5.68 Mbps
延迟:93.85 毫秒
抖动:222.66 毫秒