使用awk解析输出

使用awk解析输出,awk,grep,busybox,ash,Awk,Grep,Busybox,Ash,我正在尝试构造一个小的shell脚本,该脚本获取以下命令的输出:nc 127.0.0.1 5556 2>/dev/null output,并将其解析为单个变量,以便通过mqtt客户机进行传输。我想我需要使用grep或者awk 例如,如果我想将与wind0相关联的5个值解析为5个单独的变量,我该怎么做呢。我需要以$a=220、$b=0.0、$c=0.0、$d=8.2和$e=0结束 谢谢大家! 猴面包树 编辑:我正在尝试的系统是基于OpenWRT的,所以显然使用了ash或BusyBox,而不是bas

我正在尝试构造一个小的shell脚本,该脚本获取以下命令的输出:nc 127.0.0.1 5556 2>/dev/null output,并将其解析为单个变量,以便通过mqtt客户机进行传输。我想我需要使用grep或者awk

例如,如果我想将与wind0相关联的5个值解析为5个单独的变量,我该怎么做呢。我需要以$a=220、$b=0.0、$c=0.0、$d=8.2和$e=0结束

谢谢大家!

猴面包树

编辑:我正在尝试的系统是基于OpenWRT的,所以显然使用了ash或BusyBox,而不是bash

20201103061623 th0 8.2 39 -4.9 0
20201103061629 wind0 220 0.0 0.0 8.2 0
20201103061611 rain0 0.0 153.8 0.0 0
20201103061547 thb0 22.3 32 4.8 901.7 1004.5 0 1
20201103061628 data10 0.00 0
20201103061628 data11 1.29 0
20201103061628 data12 0.00 0
20201103061628 data13 11.00 0
20201103061628 data15 108.00 0
20201103061628 data16 3.00 0
20201103061628 t9 50.5 0

您可以这样做:

而read-ra-b-c-d-e;做 回声a=$a,b=$b,c=$c,d=$d,e=$e 完成<&1 | awk-F'[[:blank:][]+wind0[[:blank:][]+''NF>1{print$2}' 替换nc。。。使用实际的nc命令行

如果未使用bash,请使用:

nc。。。2> &1 | awk-F'[[:blank:]]+wind0[[:blank:]+''NF>1{print$2}'| 而read-ra-b-c-d-e;做 回声a=$a,b=$b,c=$c,d=$d,e=$e 完成
您可以这样做:

而read-ra-b-c-d-e;做 回声a=$a,b=$b,c=$c,d=$d,e=$e 完成<&1 | awk-F'[[:blank:][]+wind0[[:blank:][]+''NF>1{print$2}' 替换nc。。。使用实际的nc命令行

如果未使用bash,请使用:

nc。。。2> &1 | awk-F'[[:blank:]]+wind0[[:blank:]+''NF>1{print$2}'| 而read-ra-b-c-d-e;做 回声a=$a,b=$b,c=$c,d=$d,e=$e 完成
所以我找到了一个似乎有效的解决方案。我不知道为什么或如何,但这里是:

while read -r a b c d e; do
     echo "a=$a, b=$b, c=$c, d=$d, e=$e"
done <<EOF     
$(nc 127.0.0.1 5556 2>&1 | awk -F '[[:blank:]]+wind0[[:blank:]]+' 'NF>1{print $2}')
EOF

所以我找到了一个似乎有效的解决方案。我不知道为什么或如何,但这里是:

while read -r a b c d e; do
     echo "a=$a, b=$b, c=$c, d=$d, e=$e"
done <<EOF     
$(nc 127.0.0.1 5556 2>&1 | awk -F '[[:blank:]]+wind0[[:blank:]]+' 'NF>1{print $2}')
EOF

awk将是这个的选择。awk将是这个的选择。谢谢你的回答。我尝试了你的建议,但我得到了一个语法错误:意外重定向。经过一点研究,看起来因为我使用的是OpenWRT,所以它实际上使用的不是bash,而是ash或BusyBox。我不确定ash和BusyBox是相同还是不同。说到shell脚本,我完全不知所措。谢谢你的回答。我尝试了你的建议,但我得到了一个语法错误:意外重定向。经过一点研究,看起来因为我使用的是OpenWRT,所以它实际上使用的不是bash,而是ash或BusyBox。我不确定ash和BusyBox是相同还是不同。谈到shell脚本,我完全不知所措。在here文档中运行命令是很奇怪的。Anubhava的管道解决方案更为惯用且不易出错。在here文档中运行命令很奇怪。Anubhava的管道解决方案更为惯用且不易出错。