awk 시스템에서 bash 명령을 한 번만 실행하십시오.

awk 시스템에서 bash 명령을 한 번만 실행하십시오.

tail -F를 사용하여 악천후 경보 서버 로그 파일을 모니터링하고 awk를 사용하여 경보 조건이 충족되면 명령을 필터링하고 실행합니다. bash 명령(경고 LED를 트리거하기 위해 Pi에 전송된 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/

관련 정보