仅从 awk 系统运行一次 bash 命令

仅从 awk 系统运行一次 bash 命令

我使用 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/

相关内容