使用 AWK 并将输出捕获到 Bash 中的变量
Using AWK and Fping to capture out put to variable in Bash
我正在尝试将 fping 的输出保存到 Bash 中的一个变量中,这应该很容易,但我就是无法让它工作。我尝试了各种方法,尝试在捕获的变量上使用 AWK 和 CUT 之类的东西,但得到的是空变量。
我的思考过程如下。
- 输入 fping 8.8.8.8 -c 2 给我输出
8.8.8.8 : [0], 84 bytes, 15.1 ms (15.1 avg, 0% loss)
8.8.8.8 : [1], 84 bytes, 15.0 ms (15.0 avg, 0% loss)
8.8.8.8 : xmt/rcv/%loss = 2/2/0%, min/avg/max = 15.0/15.0/15.1
- 输入 fping -c 1 8.8.8.8 | awk '/min/' 仅 returns 我想要的最后一行。
8.8.8.8 : xmt/rcv/%loss = 2/2/0%, min/avg/max = 15.0/15.0/15.1
- 所以输入输出=$(fping -c 1 8.8.8.8 | awk '/min/')
我希望将最后一行保存到一个变量中,然后我可以进一步处理。但是我得到一个空白变量,即使它显示如下行??
$ output=$(fping -c 1 8.8.8.8 | awk '/min/')
8.8.8.8 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 15.1/15.1/15.1
我也在考虑首先使用 AWK 提取第 5 列和第 6 列值以使 post 处理更容易
类似于
output=$(fping -c 1 8.8.8.8 | awk '/min/ {loss= , time=}')
这个语法目前可能是错误的,但是给一个像 bwlow 这样的变量,所有的值都准备好提取
"2/2/0% 15.0/15.0/15.1"
我做错了什么?如何将输出的最后一行保存到变量中?我可以将它拆分,但为什么 AWK 不提取正确的位并保存它?
谢谢
这是您的 complete, unabbreviated output 尝试:
user@host$ output=$(fping -c 1 8.8.8.8 | awk '/min/')
8.8.8.8 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.66/0.66/0.66
user@host$
您在屏幕上获得输出这一事实至关重要,这意味着数据未被捕获。这通常表示数据改为写入 stderr。这是将 stdout 重定向到 stderr 时得到的结果:
user@host$ output=$(fping -c 1 8.8.8.8 2>&1 | awk '/min/')
(no output)
事实上,变量现在有一个值:
user@host$ printf '%s\n' "$output"
8.8.8.8 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.77/0.77/0.77
我正在尝试将 fping 的输出保存到 Bash 中的一个变量中,这应该很容易,但我就是无法让它工作。我尝试了各种方法,尝试在捕获的变量上使用 AWK 和 CUT 之类的东西,但得到的是空变量。
我的思考过程如下。
- 输入 fping 8.8.8.8 -c 2 给我输出
8.8.8.8 : [0], 84 bytes, 15.1 ms (15.1 avg, 0% loss) 8.8.8.8 : [1], 84 bytes, 15.0 ms (15.0 avg, 0% loss) 8.8.8.8 : xmt/rcv/%loss = 2/2/0%, min/avg/max = 15.0/15.0/15.1
- 输入 fping -c 1 8.8.8.8 | awk '/min/' 仅 returns 我想要的最后一行。
8.8.8.8 : xmt/rcv/%loss = 2/2/0%, min/avg/max = 15.0/15.0/15.1
- 所以输入输出=$(fping -c 1 8.8.8.8 | awk '/min/')
我希望将最后一行保存到一个变量中,然后我可以进一步处理。但是我得到一个空白变量,即使它显示如下行??
$ output=$(fping -c 1 8.8.8.8 | awk '/min/')
8.8.8.8 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 15.1/15.1/15.1
我也在考虑首先使用 AWK 提取第 5 列和第 6 列值以使 post 处理更容易
类似于
output=$(fping -c 1 8.8.8.8 | awk '/min/ {loss= , time=}')
这个语法目前可能是错误的,但是给一个像 bwlow 这样的变量,所有的值都准备好提取
"2/2/0% 15.0/15.0/15.1"
我做错了什么?如何将输出的最后一行保存到变量中?我可以将它拆分,但为什么 AWK 不提取正确的位并保存它?
谢谢
这是您的 complete, unabbreviated output 尝试:
user@host$ output=$(fping -c 1 8.8.8.8 | awk '/min/')
8.8.8.8 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.66/0.66/0.66
user@host$
您在屏幕上获得输出这一事实至关重要,这意味着数据未被捕获。这通常表示数据改为写入 stderr。这是将 stdout 重定向到 stderr 时得到的结果:
user@host$ output=$(fping -c 1 8.8.8.8 2>&1 | awk '/min/')
(no output)
事实上,变量现在有一个值:
user@host$ printf '%s\n' "$output"
8.8.8.8 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.77/0.77/0.77