나는 그것을 사용하고 있다속도 테스트BASH 스크립트의 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)
대기 시간, 다운로드 속도, 업로드 속도 및 지터를 얻고 싶습니다.
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 |
처음 두 열의 숫자는 비트/초 단위입니다.
답변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