【发布时间】:2016-02-28 23:32:07
【问题描述】:
我正在尝试使用 awk 在脚本的输出中搜索特定行。有人可以解释为什么这不返回输出:16.72?
我的 bash 脚本:
speed=$(./speedtest-cli)
awk '/Download:/ {print $2}' $speed
speedtest-cli
pi@raspberrypi ~/Desktop/PiControl $ ./speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Charter Communications (xxxxxx)...
Selecting best server based on latency...
Hosted by Charter Communications (yyyy, zz) [67.01 km]: 44.035 ms
Testing download speed........................................
Download: 16.72 Mbit/s
Testing upload speed..................................................
Upload: 3.45 Mbit/s
注意(包含在下面的 cmets 中)我试图避免使用单行,因为我计划从输出中打印多行。
编辑:
澄清我的最终目标。我正在尝试运行./speedtest-cli(我试图不更改此文件)。我正在尝试获取它的输出(下载速度、上传速度和延迟)并将它们作为单独的参数传递给另一个将它们写入数据库的脚本。 (本项目纯属个人使用......我不想在企业环境中使用它)
从上面的 speedtest-cli 输出我想这样做:
我的目标:
./another_script 16.72 3.45 44.035
【问题讨论】:
-
这只能在脚本中使用。
-
抱歉,我编辑了我的帖子,以便更清楚地说明我是从 bash 脚本运行的
-
单线试试:speedtest-cli | awk '{/Download:/} print $2'
-
让您的 awk 脚本检索多个值,没问题。否则将输出保存到 tmp 文件,然后进行处理。当您使用
$speed(un-dbl-quoted) 时,shell 会将数据转换为一大组单词,而无需换行符分隔行。如果您使用set -vx来调试/跟踪您的shell 脚本,您会看到这一点。祝你好运。 -
请解释你的最终目标。您打算如何处理提取的值?收集解析这些数据的最佳方法可能取决于您打算如何处理它们。 (我在这里的建议是这是一个XY Problem,如果我们知道它是什么,我们可以帮助您更好地实现您的目标,而不是帮助您加速撞墙。)