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

関連情報