그래서 저는 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
다운로드 라인만 추출한 다음 cut
Mbit/s 단위의 숫자인 두 번째 필드를 추출하여 시간을 절약할 수 있습니다.