모니터링을 위한 Speedtest-CLI 출력

모니터링을 위한 Speedtest-CLI 출력

그래서 저는 Linux를 처음 접했고 무엇을 해야할지 잘 모르겠습니다.

그래서 저는 우리의 모니터링 도구에 유용한 결과를 제공하고 싶습니다 speedtest-cli. 우리는 여러 위치에서 다운로드 및 업로드 속도를 모니터링해야 합니다.

awk를 사용하여 출력을 중단하고 원하는 숫자를 제공하는 다음 스크립트를 만들었습니다(이 경우 숫자 자체만 있고 숫자 앞이나 뒤에 텍스트는 없습니다).

SP=$(speedtest-cli 2>&1)
if [ $? -eq 0 ]
then
Down=$(echo $SP | gawk '{split($0,a,":"); print a[3]}' | \
                  gawk '{split($0,a," "); print a[1]}')
fi 
echo "$Down"

이 스크립트는 내가 원하는 방식으로 작동합니다. 그러나 저는 숫자만 반환하는 솔루션을 정말로 원합니다. 그럼 "다운로드: 90.00 Mbit/s" 줄을 검색해서 90.00을 구해서 출력하는 것이 가능한가요?



편집하다:

내가 쓴 대본에 관심이 있는 사람을 위해. 출력 <WAN_IP>,<Download>,<Upload>, 아무것도 연결되어 있지 않으면 출력0.0.0.0,0,0

#!/bin/sh

SP=$(speedtest-cli 2>&1)

if [ $? -eq 0 ]
then

        From=$(echo "$SP" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")

        Down=$(echo "$SP" | gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}')

        Up=$(echo "$SP" | gawk '{if (match ($0,/Upload: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}')

else
        From="0.0.0.0"

        Down="0"

        Up="0"

fi

echo "$From,$Down,$Up"

답변1

명시적으로 사용하고 있으므로 함수를 사용하여 " number " 패턴을 찾고 다음과 같이 문자열에서 찾은 해당 패턴의 실제 값을 추출할 gawk수 있습니다 .match()Download:Mbit/s

gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}'

이것은 것이다

  • 패턴이 먼저 발견되었는지 확인하고
  • ( ... )RegExp의 모든 포함된 하위 그룹을 배열 요소에 넣습니다.a

그런 다음 간단히 항목 1을 사용할 수 있습니다(RegExp에는 해당 하위 그룹이 하나만 있으므로).

답변2

speedtest-cli--simple출력을 간단하게 만드는 스위치가 있습니다 ( speedtest-cli --help자세한 내용을 알아보세요).

# speedtest-cli --simple --no-upload
Ping: 18.833 ms
Download: 33.88 Mbit/s
Upload: 0.00 Mbit/s

따라서 다운로드 전용 속도를 숫자 형태로 얻을 수 있습니다.

# speedtest-cli --simple --no-upload|grep "^Download:"|cut -d" " -f2
34.92

이렇게 하면 --no-upload업로드 속도를 테스트하지 않고 grep다운로드 라인만 추출한 다음 cutMbit/s 단위의 숫자인 두 번째 필드를 추출하여 시간을 절약할 수 있습니다.

관련 정보