繁体   English   中英

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

[英]interactive parsing 2 lines with awk or other utility maybe?

我的程序在后台运行,当收到某些消息时,它将给出如下两行输出:

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"

(在测试后删除回声),但如果从system()调用该程序确实有意义,则idk与仅从awk输出值并将其从管道调用到xargs或类似对象相比是有意义的。 重命名变量foo以表示其实际含义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM