我的文件包含过去几个小时通过我的脚本运行的速度测试的结果。文本文件中的结果如下,脚本于 2018 年 7 月 23 日星期一 04:41:11 PM 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