我使用 tail -F 来监视恶劣天气警报服务器日志文件,并使用 awk 来过滤并在满足警报条件时执行命令。我只需要在系统中执行一次 bash 命令(发送到 Pi 以触发警报 LED 的 ssh 命令),而不是每次匹配一次。除了系统命令为每条匹配的行运行一次之外,一切正常。这是我到目前为止所拥有的:
tail -F /home/user/test.txt | stdbuf -oL awk '/ZZZ029/{getline; if (/SV.W/) print system("command")}'
电流输出(行数可能不同):
/O.NEW.KBMX.SV.W.0028.190314T2350Z-190315T0030Z/
/O.CON.KFFC.SV.W.0021.000000T0000Z-190315T0015Z/
/O.NEW.KBMX.SV.W.0028.190314T2350Z-190315T0030Z/
/O.CON.KFFC.SV.W.0021.000000T0000Z-190315T0015Z/
/O.NEW.KBMX.SV.W.0028.190314T2350Z-190315T0030Z/
/O.CON.KFFC.SV.W.0021.000000T0000Z-190315T0015Z/
预期输出:
/O.NEW.KBMX.SV.W.0028.190314T2350Z-190315T0030Z/
我只需要一行输出,因此系统命令只会运行一次。或者只是一种无论输出行数如何运行命令一次的方法。
答案1
From current output what you provided from my understanding you want to remove duplicates
pipeline_previous_command|awk '{if(!seen[$1]++)print $1}'
/O.NEW.KBMX.SV.W.0028.190314T2350Z-190315T0030Z/
/O.CON.KFFC.SV.W.0021.000000T0000Z-190315T0015Z/
假设你想要输出作为上面提到的输出
raveen:~$ pipeline_previous_command | awk '/W.0028/{if(!seen[$1]++)print $1}'
/O.NEW.KBMX.SV.W.0028.190314T2350Z-190315T0030Z/