>我有程序在后台运行,当它收到某些消息时, 它将给出输出 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
,使其能够代表它的实际含义。