交互式解析 2 行与 awk 或其他实用程序?



>我有程序在后台运行,当它收到某些消息时, 它将给出输出 2 行,如下所示:

09/09 15:28:29 Tx PL HouseUnit: A2
09/09 15:28:29 Tx PL House: A Func: Off

现在我想通过发出命令来解析单词 A2 和 Off 以发布 mqtt 消息:

mosquitto_pub -q 1 -t X10/"A2" -m "Off"

我想用awk解析,但我的问题是awk只以交互方式解析1行。 有人有解决此问题的明智建议吗?

awk '{if($3 == "Tx" && $4 == "PL" && $5 == "HouseUnit:") print $6; if($3 == "Tx" && $4 == "PL" && $5 == "House:" && $7 == "Func:") print $8} {system("mosquitto_pub -q 1 -t X10/127.0.0.1/switch/"$6 -m "$8) }'

上面的代码仅解析执行的最后一行

mosquitto_pub -q 1 -t X10/"A" -m "Off"

这是您要执行的操作的语法:

$ awk '
($3 == "Tx") && ($4 == "PL") {
if ($5 == "HouseUnit:") {
foo = $6
}
else if ( ($5 == "House:") && ($7 == "Func:") ) {
system("echo mosquitto_pub -q 1 -t X10/127.0.0.1/switch/"" foo "" -m "" $8 """)
}
}
' file
mosquitto_pub -q 1 -t X10/127.0.0.1/switch/"A2" -m "Off"

(测试后删除回声(但是 idk 如果从 System(( 调用该程序真的有意义,而不是只是从 awk 输出值并将其从管道调用到 xarg 或类似的东西。将变量重命名为foo,使其能够代表它的实际含义。

相关内容

最新更新