awk 출력을 int/float 값과 비교하는 방법

awk 출력을 int/float 값과 비교하는 방법

내 파일에는 지난 몇 시간 동안 스크립트를 통해 실행된 속도 테스트 결과가 포함되어 있습니다. 텍스트 파일의 결과는 다음과 같습니다. 스크립트는 2018년 7월 23일 월요일 오후 04:41:11 IST에 시작되었으며 파일 이름은 speedtest.txt 입니다. 스크립트는 2018년 7월 23일 월요일 04:41:11에 시작되었습니다. PM IST 시작

root@xxxx: root@xxxx:~# 
root@xxxx: root@xxxx:~# speedtest-cli --simple
Ping: 40.629 ms
Download: 19.67 Mbit/s
Upload: 1.08 Mbit/s
root@xxxx: root@xxxx:~# speedtest-cli --simple
Ping: 51.229 ms
Download: 22.16 Mbit/s
Upload: 0.80 Mbit/s
root@xxxx: root@xxxx:~# speedtest-cli --simple
Ping: 50.924 ms
Download: 21.82 Mbit/s
Upload: 1.07 Mbit/s
root@xxxx: root@xxxx:~# speedtest-cli --simple
Ping: 51.438 ms
Download: 20.87 Mbit/s
Upload: 0.67 Mbit/s
root@xxxx: root@xxxx:~# speedtest-cli --simple
Ping: 51.149 ms
Download: 21.51 Mbit/s
Upload: 0.94 Mbit/s
root@xxxx: root@xxxx:~# exit
exit

Script done on Monday 23 July 2018 04:51:11 PM IST

다음 awk 명령을 사용하여 개별적으로 다운로드 속도를 얻었습니다.

sudo cat speedtest.txt | grep "Download:" | cut -d ' ' -f2 | awk '{ SUM += $1} END { print SUM }' | awk '{ SUM = $1/5} END {print SUM}'

위 명령의 출력은 다음과 같습니다.

21.206

이제 위의 값이 내가 보장한 값보다 큰지 확인하고 싶습니다. 이 값을 별도의 런타임 변수에 저장하고 이를 정적 값과 비교하려고 시도했지만 21.206 >= 25 or not.나에게 맞는 명령을 찾을 수 없었습니다. 새 변수에 저장한 후 계속 새 행을 추가합니다. 그렇다면 출력 값을 awk와 비교하여 그것이 참인지 거짓인지 보여줄 수 있는 방법이 있나요? Expect 스크립트를 사용하여 "speedtest.txt" 파일을 저장하고 있습니다.

답변1

전체 명령 파이프라인은 다음과 같이 단순화될 수 있습니다.

$ cat speedtest.txt | awk '/Download:/{sum+=$2}END{print sum/5}'
21.206

또는 "고양이를 쓸데없이 사용하는 것"을 피하는 것이 더 좋습니다.

$ awk '/Download:/{sum+=$2}END{print sum/5}' speedtest.txt
21.206

5개 이상의 측정값을 읽으려면 다음을 사용하십시오.

$ awk '/Download:/{s+=$2;c++}END{print( s/c ) }' speedtest.txt

그리고 TRUE/FALSE문자열을 얻으려면 다음을 사용하십시오.

$ awk '/Download:/{s+=$2;c++}END{print(s/=c,s>25?"TRUE":"FALSE")}' speedtest.txt
21.206 FALSE

관련 정보